codigo actual del servidor, con avances de joan

This commit is contained in:
Jose Sanchez
2023-08-07 15:52:04 -04:00
commit 3cd9b8bbe8
3070 changed files with 532255 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function success($message)
{
return response()->json([
'result' => true,
'message' => $message
]);
}
public function failed($message)
{
return response()->json([
'result' => false,
'message' => $message
]);
}
}

View File

@@ -0,0 +1,114 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Resources\V2\MessageCollection;
use App\Http\Resources\V2\Seller\ConversationCollection;
use App\Http\Resources\V2\Seller\ConversationResource;
use Illuminate\Http\Request;
use App\Models\Conversation;
use App\Models\BusinessSetting;
use App\Models\Message;
use Auth;
use App\Models\Product;
use Mail;
use App\Mail\ConversationMailManager;
use DB;
class ConversationController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
if (BusinessSetting::where('type', 'conversation_system')->first()->value == 1) {
//SELECT sender_id, receiver_id, title, MAX(created_at) AS max_created_at FROM `conversations` WHERE receiver_id = 3 GROUP BY sender_id order by max_created_at desc;
// $conversations = Conversation::select('sender_id', 'receiver_id', 'title', DB::raw("MAX(created_at) as max_created_at"))
// ->where('receiver_id', '=', auth()->user()->id)
// ->orderBy('max_created_at', 'DESC')
// ->groupBy('sender_id')
// ->get();
$conversations = Conversation::where('receiver_id', auth()->user()->id)
->orderBy('created_at', 'desc')
->get();
return ConversationResource::collection($conversations);
} else {
return $this->failed(translate('Conversation is disabled at this moment'));
}
}
public function send_message_to_customer(Request $requrest)
{
$message = new Message();
$conversation = Conversation::find($requrest->conversation_id)->where("receiver_id",auth()->user()->id)->first();
if($conversation){
$message->conversation_id = $requrest->conversation_id;
$message->user_id = auth()->user()->id;
$message->message = $requrest->message;
$message->save();
return $this->success(translate('Message send successfully'));
}else{
return $this->failed(translate('You can not send this message.'));
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$conversation = Conversation::findOrFail(decrypt($id));
if ($conversation->sender_id == auth()->user()->id) {
$conversation->sender_viewed = 1;
} elseif ($conversation->receiver_id == auth()->user()->id) {
$conversation->receiver_viewed = 1;
}
$conversation->save();
return new ConversationCollection($conversation);
}
public function showMessages($id)
{
$conversation = Conversation::findOrFail($id);
if ($conversation->receiver_id == auth()->user()->id) {
$messages = Message::where("conversation_id",$id)->orderBy('created_at', 'DESC')->get();
return new MessageCollection($messages);
} else {
return $this->failed(translate('You can not see this message.'));
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$conversation = Conversation::findOrFail(decrypt($id));
foreach ($conversation->messages as $key => $message) {
$message->delete();
}
if (Conversation::destroy(decrypt($id))) {
flash(translate('Conversation has been deleted successfully'))->success();
return back();
}
}
}

View File

@@ -0,0 +1,93 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Requests\CouponRequest;
use App\Http\Resources\V2\Seller\CouponResource;
use App\Http\Resources\V2\Seller\ProductCollection;
use Illuminate\Http\Request;
use App\Models\Coupon;
use App\Models\Product;
use Auth;
class CouponController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$coupons = Coupon::where('user_id', auth()->user()->id)->orderBy('id','desc')->get();
return CouponResource::collection($coupons);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(CouponRequest $request)
{
$user_id = auth()->user()->id;
Coupon::create($request->validated() + [
'user_id' => $user_id,
]);
return $this->success(translate('Coupon has been saved successfully'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$coupon = Coupon::where('id', $id)->where('user_id', auth()->user()->id)->first();
// dd($coupon);
return new CouponResource($coupon);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(CouponRequest $request, Coupon $coupon)
{
$coupon->update($request->validated());
return $this->success(translate('Coupon has been updated successfully'));
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Coupon::where('id', '=', $id)->where('user_id', auth()->user()->id)->delete();
return $this->success(translate('Coupon has been deleted successfully'));
}
public function coupon_for_product(Request $request)
{
if($request->coupon_type == "product_base") {
$products = Product::where('name','LIKE',"%".$request->name."%")->where('user_id', auth()->user()->id)->paginate(10);
// $products = filter_products(Product::where('user_id', auth()->user()->id))->get();
return new ProductCollection($products);
}
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Resources\V2\Seller\OrderCollection;
use App\Http\Resources\V2\Seller\OrderDetailResource;
use App\Http\Resources\V2\Seller\OrderItemResource;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Services\OrderService ;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function getOrderList(Request $request)
{
$order_query = Order::query();
if ($request->payment_status != "" || $request->payment_status != null) {
$order_query->where('payment_status', $request->payment_status);
}
if ($request->delivery_status != "" || $request->delivery_status != null) {
$delivery_status = $request->delivery_status;
$order_query->whereIn("id", function ($query) use ($delivery_status) {
$query->select('order_id')
->from('order_details')
->where('delivery_status', $delivery_status);
});
}
$orders = $order_query->where('seller_id', auth()->user()->id)->latest()->paginate(10);
return new OrderCollection($orders);
}
public function getOrderDetails($id)
{
$order_detail = Order::where('id', $id)->where('seller_id', auth()->user()->id)->get();
return OrderDetailResource::collection($order_detail);
}
public function getOrderItems($id)
{
$order_id = Order::select('id')->where('id', $id)->where('seller_id', auth()->user()->id)->first();
$order_query = OrderDetail::where('order_id', $order_id->id);
return OrderItemResource::collection($order_query->get());
// return new PurchaseHistoryItemsCollection($order_query->get());
}
public function update_delivery_status(Request $request) {
(new OrderService)->handle_delivery_status($request);
return $this->success(translate('Delivery status has been changed successfully'));
}
public function update_payment_status(Request $request) {
(new OrderService)->handle_payment_status($request);
return $this->success(translate('Payment status has been changed successfully'));
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Controllers\Controller;
use App\Http\Resources\V2\Seller\SellerPaymentResource;
use Illuminate\Http\Request;
use App\Models\Payment;
class PaymentController extends Controller
{
//
public function getHistory(){
$sellerId = auth()->user()->id;
$payments = Payment::orderBy('created_at', 'desc')->where('seller_id',$sellerId)->latest()->paginate(10);;
return SellerPaymentResource::collection($payments);
}
}

View File

@@ -0,0 +1,298 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Requests\ProductRequest;
use App\Http\Resources\V2\Seller\AttributeCollection;
use App\Http\Resources\V2\Seller\BrandCollection;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Http\Resources\V2\Seller\CategoriesCollection;
use App\Http\Resources\V2\Seller\ColorCollection;
use App\Http\Resources\V2\Seller\ProductCollection;
use App\Http\Resources\V2\Seller\ProductDetailsCollection;
use App\Http\Resources\V2\Seller\ProductReviewCollection;
use App\Http\Resources\V2\Seller\TaxCollection;
use App\Models\Attribute;
use App\Models\Brand;
use App\Models\Cart;
use App\Models\Category;
use App\Models\Color;
use App\Models\Product;
use App\Models\ProductTax;
use App\Models\ProductTranslation;
use App\Models\Review;
use App\Models\Tax;
use Artisan;
use App\Services\ProductFlashDealService;
use App\Services\ProductService;
use App\Services\ProductStockService;
use App\Services\ProductTaxService;
class ProductController extends Controller
{
protected $productService;
protected $productTaxService;
protected $productFlashDealService;
protected $productStockService;
public function __construct(
ProductService $productService,
ProductTaxService $productTaxService,
ProductFlashDealService $productFlashDealService,
ProductStockService $productStockService
) {
$this->productService = $productService;
$this->productTaxService = $productTaxService;
$this->productFlashDealService = $productFlashDealService;
$this->productStockService = $productStockService;
}
public function index()
{
$products = Product::where('user_id', auth()->user()->id)->where('digital', 0)->where('auction_product', 0)->where('wholesale_product', 0)->orderBy('created_at', 'desc');
$products = $products->paginate(10);
return new ProductCollection($products);
}
public function getCategory()
{
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
return CategoriesCollection::collection($categories);
}
public function getBrands()
{
$brands = Brand::all();
return BrandCollection::collection($brands);
}
public function getTaxes()
{
$taxes = Tax::where('tax_status', 1)->get();
return TaxCollection::collection($taxes);
}
public function getAttributes()
{
$attributes = Attribute::with('attribute_values')->get();
return AttributeCollection::collection($attributes);
}
public function getColors()
{
$colors = Color::orderBy('name', 'asc')->get();
return ColorCollection::collection($colors);
}
public function store(ProductRequest $request)
{
if (addon_is_activated('seller_subscription')) {
if (!seller_package_validity_check(auth()->user()->id)) {
return $this->failed(translate('Please upgrade your package.'));
}
}
if (auth()->user()->user_type != 'seller') {
return $this->failed(translate('Unauthenticated User.'));
}
$request->merge(['added_by' => 'seller']);
$product = $this->productService->store($request->except([
'_token', 'sku', 'choice', 'tax_id', 'tax', 'tax_type', 'flash_deal_id', 'flash_discount', 'flash_discount_type'
]));
$request->merge(['product_id' => $product->id]);
//VAT & Tax
if ($request->tax_id) {
$this->productTaxService->store($request->only([
'tax_id', 'tax', 'tax_type', 'product_id'
]));
}
//Product Stock
$this->productStockService->store($request->only([
'colors_active', 'colors', 'choice_no', 'unit_price', 'sku', 'current_stock', 'product_id'
]), $product);
// Product Translations
$request->merge(['lang' => env('DEFAULT_LANGUAGE')]);
ProductTranslation::create($request->only([
'lang', 'name', 'unit', 'description', 'product_id'
]));
return $this->success(translate('Product has been inserted successfully'));
}
public function edit(Request $request, $id)
{
if (auth()->user()->user_type != 'seller') {
return $this->failed(translate('Unauthenticated User.'));
}
$product = Product::where('id', $id)->with('stocks')->first();
if (auth()->user()->id != $product->user_id) {
return $this->failed(translate('This product is not yours.'));
}
$product->lang = $request->lang == null ? env("DEFAULT_LANGUAGE") : $request->lang;
return new ProductDetailsCollection($product);
/* $data = response()->json([
'lang' => $lang,
'product' => $product,
'product_name' => $product->getTranslation('name',$lang),
'product_unit' => $product->getTranslation('unit',$lang),
'description' => $product->getTranslation('description',$lang),
]);
return $data;*/
}
public function update(ProductRequest $request, Product $product)
{
//Product
$product = $this->productService->update($request->except([
'_token', 'sku', 'choice', 'tax_id', 'tax', 'tax_type', 'flash_deal_id', 'flash_discount', 'flash_discount_type'
]), $product);
//Product Stock
foreach ($product->stocks as $key => $stock) {
$stock->delete();
}
$request->merge(['product_id' => $product->id]);
$this->productStockService->store($request->only([
'colors_active', 'colors', 'choice_no', 'unit_price', 'sku', 'current_stock', 'product_id'
]), $product);
//VAT & Tax
if ($request->tax_id) {
ProductTax::where('product_id', $product->id)->delete();
$request->merge(['product_id' => $product->id]);
$this->productTaxService->store($request->only([
'tax_id', 'tax', 'tax_type', 'product_id'
]));
}
// Product Translations
ProductTranslation::updateOrCreate(
$request->only([
'lang', 'product_id'
]),
$request->only([
'name', 'unit', 'description'
])
);
return $this->success(translate('Product has been updated successfully'));
}
public function change_status(Request $request)
{
$product = Product::where('user_id', auth()->user()->id)
->where('id', $request->id)
->update([
'published' => $request->status
]);
if ($product== 0) {
return $this->failed(translate('This product is not yours'));
}
return ($request->status == 1) ?
$this->success(translate('Product has been published successfully')) :
$this->success(translate('Product has been unpublished successfully'));
}
public function change_featured_status(Request $request)
{
$product = Product::where('user_id', auth()->user()->id)
->where('id', $request->id)
->update([
'seller_featured' => $request->featured_status
]);
if ($product == 0) {
return $this->failed(translate('This product is not yours'));
}
return ($request->featured_status == 1) ?
$this->success(translate('Product has been featured successfully')) :
$this->success(translate('Product has been unfeatured successfully'));
}
public function duplicate($id)
{
$product = Product::findOrFail($id);
if (auth()->user()->id != $product->user_id) {
return $this->failed(translate('This product is not yours'));
}
if (addon_is_activated('seller_subscription')) {
if (!seller_package_validity_check(auth()->user()->id)) {
return $this->failed(translate('Please upgrade your package'));
}
}
//Product
$product_new = (new ProductService)->product_duplicate_store($product);
//Store in Product Stock Table
(new ProductStockService)->product_duplicate_store($product->stocks, $product_new);
//Store in Product Tax Table
(new ProductTaxService)->product_duplicate_store($product->taxes, $product_new);
return $this->success(translate('Product has been duplicated successfully'));
}
public function destroy($id)
{
$product = Product::findOrFail($id);
if (auth()->user()->id != $product->user_id) {
return $this->failed(translate('This product is not yours'));
}
$product->product_translations()->delete();
$product->stocks()->delete();
$product->taxes()->delete();
if (Product::destroy($id)) {
Cart::where('product_id', $id)->delete();
return $this->success(translate('Product has been deleted successfully'));
Artisan::call('view:clear');
Artisan::call('cache:clear');
}
}
public function product_reviews()
{
$reviews = Review::orderBy('id', 'desc')
->join('products', 'reviews.product_id', '=', 'products.id')
->join('users', 'reviews.user_id', '=', 'users.id')
->where('products.user_id', auth()->user()->id)
->select('reviews.id', 'reviews.rating', 'reviews.comment', 'reviews.status', 'reviews.updated_at', 'products.name as product_name', 'users.id as user_id', 'users.name', 'users.avatar')
->distinct()
->paginate(1);
return new ProductReviewCollection($reviews);
}
public function remainingUploads()
{
$remaining_uploads = (max(0, auth()->user()->shop->product_upload_limit - auth()->user()->products()->count()));
return response()->json([
'ramaining_product' => $remaining_uploads,
]);
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Resources\V2\RefundRequestCollection;
use Illuminate\Http\Request;
use App\Models\RefundRequest;
class RefundController extends Controller
{
//
public function index(){
$sellerId = auth()->user()->id;
$refunds = RefundRequest::where('seller_id',$sellerId)->latest()->paginate(10);
return new RefundRequestCollection($refunds);
}
public function request_approval_vendor(Request $request)
{
$refund = RefundRequest::findOrFail($request->refund_id);
if (auth()->user()->user_type == 'admin' || auth()->user()->user_type == 'staff') {
$refund->seller_approval = 1;
$refund->admin_approval = 1;
}
elseif (auth()->user()->user_type == 'seller' && $refund->seller_id==auth()->user()->id){
$refund->seller_approval = 1;
}
if ($refund->save())
{
return $this->success(translate('Refund Status has been change successfully')) ;
}
else {
return $this->failed(translate('Refund Status change failed!'));
}
}
public function reject_refund_request(Request $request){
$refund = RefundRequest::findOrFail($request->refund_id);
$refund->reject_reason = $request->reject_reason;
if (auth()->user()->user_type == 'admin' || auth()->user()->user_type == 'staff') {
$refund->admin_approval = 2;
$refund->refund_status = 2;
}
elseif (auth()->user()->user_type == 'seller' && $refund->seller_id==auth()->user()->id){
$refund->seller_approval = 2;
}
if ($refund->save())
{
return $this->success(translate('Refund Status has been change successfully')) ;
}
else {
return $this->failed(translate('Refund Status change failed!'));
}
}
}

View File

@@ -0,0 +1,100 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Controllers\Api\V2\Controller;
use App\Http\Resources\V2\Seller\AuctionProductBidCollection;
use App\Http\Resources\V2\Seller\AuctionProductCollection;
use App\Http\Resources\V2\Seller\AuctionProductDetailsResource;
use App\Http\Resources\V2\Seller\OrderCollection;
use App\Models\AuctionProductBid;
use App\Models\Order;
use Illuminate\Http\Request;
use App\Models\Product;
use App\Services\AuctionService;
use Auth;
use DB;
class SellerAuctionProductController extends Controller
{
public function index()
{
$products = [];
if (get_setting('seller_auction_product') == 0) {
$products = [];
} else {
$products = Product::where('auction_product', 1)->where('user_id', Auth::user()->id)->orderBy('created_at', 'desc');
}
return new AuctionProductCollection($products->paginate(10));
}
public function store(Request $request)
{
if (addon_is_activated('seller_subscription')) {
if (!seller_package_validity_check(auth()->user()->id)) {
return $this->failed(translate('Please upgrade your package.'));
}
}
(new AuctionService)->store($request);
return $this->success(translate('Auction Product has been inserted successfully'));
}
public function edit(Request $request, $id)
{
$product = Product::findOrFail($id);
$product->lang = $request->lang == null ? env("DEFAULT_LANGUAGE") : $request->lang;
return new AuctionProductDetailsResource($product);
}
public function update(Request $request, $id)
{
(new AuctionService)->update($request, $id);
return $this->success(translate('Auction Product has been updated successfully'));
}
public function destroy($id)
{
(new AuctionService)->destroy($id);
return $this->success(translate('Auction Product has been deleted successfully'));
}
public function productBids($id)
{
return new AuctionProductBidCollection(AuctionProductBid::latest()->where('product_id', $id)->paginate(15));
}
public function bidDestroy($id)
{
AuctionProductBid::destroy($id);
return $this->success(translate('Bid deleted successfully'));
}
public function getAuctionOrderList(Request $request)
{
$orders = Order::leftJoin('order_details', 'orders.id', '=', 'order_details.order_id')
->leftJoin('products', 'order_details.product_id', '=', 'products.id')
->where('orders.seller_id', auth()->user()->id)
->where('products.auction_product', '1')
->select("orders.*")
->orderBy('code', 'desc');
if ($request->payment_status != null) {
$orders = $orders->where('orders.payment_status', $request->payment_status);
}
if ($request->delivery_status != null) {
$orders = $orders->where('orders.delivery_status', $request->delivery_status);
}
if ($request->has('search')) {
$orders = $orders->where('code', 'like', '%' . $request->search . '%');
}
return new OrderCollection($orders->paginate(15));
}
}

View File

@@ -0,0 +1,280 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Resources\V2\UploadedFileCollection;
use Illuminate\Http\Request;
use App\Models\Upload;
use Response;
use Auth;
use Storage;
use Image;
class SellerFileUploadController extends Controller
{
public function index(Request $request)
{
if (auth()->user()->user_type == 'seller') {
$all_uploads = Upload::where('user_id', auth()->user()->id);
if ($request->search != null) {
$all_uploads->where('file_original_name', 'like', '%' . $request->search . '%');
}
if ($request->type != null) {
$all_uploads->where('type', $request->type);
}
switch ($request->sort) {
case 'newest':
$all_uploads->orderBy('created_at', 'desc');
break;
case 'oldest':
$all_uploads->orderBy('created_at', 'asc');
break;
case 'smallest':
$all_uploads->orderBy('file_size', 'asc');
break;
case 'largest':
$all_uploads->orderBy('file_size', 'desc');
break;
default:
$all_uploads->orderBy('created_at', 'desc');
break;
}
$all_uploads = $all_uploads->paginate(30)->appends(request()->query());
return new UploadedFileCollection($all_uploads);
}
return response()->json([
"result" => false,
"data" => []
]);
}
public function upload(Request $request)
{
$type = array(
"jpg" => "image",
"jpeg" => "image",
"png" => "image",
"svg" => "image",
"webp" => "image",
"gif" => "image",
"mp4" => "video",
"mpg" => "video",
"mpeg" => "video",
"webm" => "video",
"ogg" => "video",
"avi" => "video",
"mov" => "video",
"flv" => "video",
"swf" => "video",
"mkv" => "video",
"wmv" => "video",
"wma" => "audio",
"aac" => "audio",
"wav" => "audio",
"mp3" => "audio",
"zip" => "archive",
"rar" => "archive",
"7z" => "archive",
"doc" => "document",
"txt" => "document",
"docx" => "document",
"pdf" => "document",
"csv" => "document",
"xml" => "document",
"ods" => "document",
"xlr" => "document",
"xls" => "document",
"xlsx" => "document"
);
if (auth()->user()->user_type == 'seller') {
if ($request->hasFile('aiz_file')) {
$upload = new Upload;
$extension = strtolower($request->file('aiz_file')->getClientOriginalExtension());
if (
env('DEMO_MODE') == 'On' &&
isset($type[$extension]) &&
$type[$extension] == 'archive'
) {
return $this->failed(translate('File has been inserted successfully'));
}
if (isset($type[$extension])) {
$upload->file_original_name = null;
$arr = explode('.', $request->file('aiz_file')->getClientOriginalName());
for ($i = 0; $i < count($arr) - 1; $i++) {
if ($i == 0) {
$upload->file_original_name .= $arr[$i];
} else {
$upload->file_original_name .= "." . $arr[$i];
}
}
$path = $request->file('aiz_file')->store('uploads/all', 'local');
$size = $request->file('aiz_file')->getSize();
// Return MIME type ala mimetype extension
$finfo = finfo_open(FILEINFO_MIME_TYPE);
// Get the MIME type of the file
$file_mime = finfo_file($finfo, base_path('public/') . $path);
if ($type[$extension] == 'image' && get_setting('disable_image_optimization') != 1) {
try {
$img = Image::make($request->file('aiz_file')->getRealPath())->encode();
$height = $img->height();
$width = $img->width();
if ($width > $height && $width > 1500) {
$img->resize(1500, null, function ($constraint) {
$constraint->aspectRatio();
});
} elseif ($height > 1500) {
$img->resize(null, 800, function ($constraint) {
$constraint->aspectRatio();
});
}
$img->save(base_path('public/') . $path);
clearstatcache();
$size = $img->filesize();
} catch (\Exception $e) {
//dd($e);
}
}
if (env('FILESYSTEM_DRIVER') == 's3') {
Storage::disk('s3')->put(
$path,
file_get_contents(base_path('public/') . $path),
[
'visibility' => 'public',
'ContentType' => $extension == 'svg' ? 'image/svg+xml' : $file_mime
]
);
if ($arr[0] != 'updates') {
unlink(base_path('public/') . $path);
}
}
$upload->extension = $extension;
$upload->file_name = $path;
$upload->user_id = Auth::user()->id;
$upload->type = $type[$upload->extension];
$upload->file_size = $size;
$upload->save();
}
return $this->success(translate('File has been inserted successfully'));
}else{
return $this->failed(translate("Upload file is missing"));
}
}
return $this->failed(translate("You can't upload the file"));
}
public function destroy($id)
{
$upload = Upload::findOrFail($id);
if (auth()->user()->user_type == 'seller' && $upload->user_id != auth()->user()->id) {
return $this->failed(translate("You don't have permission for deleting this!"));
}
try {
if (env('FILESYSTEM_DRIVER') == 's3') {
Storage::disk('s3')->delete($upload->file_name);
if (file_exists(public_path() . '/' . $upload->file_name)) {
unlink(public_path() . '/' . $upload->file_name);
}
} else {
unlink(public_path() . '/' . $upload->file_name);
}
$upload->delete();
return $this->success(translate('File deleted successfully'));
} catch (\Exception $e) {
$upload->delete();
return $this->failed(translate('File deleted Failed'));
}
return $this->success(translate('File deleted successfully'));
}
public function bulk_uploaded_files_delete(Request $request)
{
if ($request->id) {
foreach ($request->id as $file_id) {
$this->destroy($file_id);
}
return 1;
} else {
return 0;
}
}
public function get_preview_files(Request $request)
{
$ids = explode(',', $request->ids);
$files = Upload::whereIn('id', $ids)->get();
$new_file_array = [];
foreach ($files as $file) {
$file['file_name'] = my_asset($file->file_name);
if ($file->external_link) {
$file['file_name'] = $file->external_link;
}
$new_file_array[] = $file;
}
// dd($new_file_array);
return $new_file_array;
// return $files;
}
public function all_file()
{
$uploads = Upload::all();
foreach ($uploads as $upload) {
try {
if (env('FILESYSTEM_DRIVER') == 's3') {
Storage::disk('s3')->delete($upload->file_name);
if (file_exists(public_path() . '/' . $upload->file_name)) {
unlink(public_path() . '/' . $upload->file_name);
}
} else {
unlink(public_path() . '/' . $upload->file_name);
}
$upload->delete();
flash(translate('File deleted successfully'))->success();
} catch (\Exception $e) {
$upload->delete();
flash(translate('File deleted successfully'))->success();
}
}
Upload::query()->truncate();
return back();
}
//Download project attachment
public function attachment_download($id)
{
$project_attachment = Upload::find($id);
try {
$file_path = public_path($project_attachment->file_name);
return Response::download($file_path);
} catch (\Exception $e) {
flash(translate('File does not exist!'))->error();
return back();
}
}
//Download project attachment
public function file_info(Request $request)
{
$file = Upload::findOrFail($request['id']);
return (auth()->user()->user_type == 'seller')
? view('seller.uploads.info', compact('file'))
: view('backend.uploaded_files.info', compact('file'));
}
}

View File

@@ -0,0 +1,71 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Resources\V2\Seller\SellerPackageResource;
use Illuminate\Http\Request;
use App\Models\SellerPackage;
use App\Models\SellerPackagePayment;
use App\Models\Seller;
use App\Models\Order;
use App\Utility\PayfastUtility;
use Auth;
use Session;
use Carbon\Carbon;
class SellerPackageController extends Controller
{
public function seller_packages_list()
{
if (addon_is_activated('seller_subscription')) {
$seller_packages = SellerPackage::all();
return SellerPackageResource::collection($seller_packages);
}
return $this->failed(translate('Package is not available'));
}
public function purchase_free_package(Request $request)
{
$data['seller_package_id'] = $request->package_id;
$data['payment_method'] = $request->payment_option;
$seller_package = SellerPackage::findOrFail($request->seller_package_id);
if ($seller_package->amount == 0) {
seller_purchase_payment_done(auth()->user()->id, $request->package_id, $request->amount, 'Free Package', null);
return $this->success(translate('Package purchasing successful'));
} elseif (
auth()->user()->shop->seller_package != null &&
$seller_package->product_upload_limit < auth()->user()->shop->seller_package->product_upload_limit
) {
return $this->failed(translate('You have more uploaded products than this package limit. You need to remove excessive products to downgrade.'));
}
}
public function purchase_package_offline(Request $request)
{
$seller_package = SellerPackage::findOrFail($request->package_id);
if (
auth()->user()->shop->seller_package != null &&
$seller_package->product_upload_limit < auth()->user()->shop->seller_package->product_upload_limit
) {
return $this->failed(translate('You have more uploaded products than this package limit. You need to remove excessive products to downgrade.'));
}
$seller_package = new SellerPackagePayment;
$seller_package->user_id = auth()->user()->id;
$seller_package->seller_package_id = $request->package_id;
$seller_package->payment_method = $request->payment_option;
$seller_package->payment_details = $request->trx_id;
$seller_package->approval = 0;
$seller_package->offline_payment = 1;
$seller_package->reciept = $request->photo;
$seller_package->save();
return $this->success(translate('Offline payment has been done. Please wait for response.'));
}
}

View File

@@ -0,0 +1,107 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use Illuminate\Http\Request;
use App\Models\SellerPackagePayment;
use App\Models\SellerPackage;
class SellerPackagePaymentController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
public function offline_payment_request(){
$package_payment_requests = SellerPackagePayment::where('offline_payment',1)->orderBy('id', 'desc')->paginate(10);
return view('manual_payment_methods.seller_package_payment_request', compact('package_payment_requests'));
}
public function offline_payment_approval(Request $request)
{
$package_payment = SellerPackagePayment::findOrFail($request->id);
$package_details = SellerPackage::findOrFail($package_payment->seller_package_id);
$package_payment->approval = $request->status;
if($package_payment->save()){
$seller = $package_payment->user->seller;
$seller->seller_package_id = $package_payment->seller_package_id;
$seller->invalid_at = date('Y-m-d', strtotime( $seller->invalid_at. ' +'. $package_details->duration .'days'));
if($seller->save()){
return 1;
}
}
return 0;
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}

View File

@@ -0,0 +1,298 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Controllers\Api\V2\AuthController;
use App\Http\Requests\SellerRegistrationRequest;
use App\Http\Resources\V2\Seller\ProductCollection;
use App\Http\Resources\V2\Seller\ProductMiniCollection;
use App\Http\Resources\V2\Seller\CommissionHistoryResource;
use App\Http\Resources\V2\Seller\SellerPackageResource;
use App\Http\Resources\V2\Seller\SellerPaymentResource;
use App\Http\Resources\V2\ShopCollection;
use App\Http\Resources\V2\ShopDetailsCollection;
use App\Models\BusinessSetting;
use App\Models\Category;
use App\Models\CommissionHistory;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Models\Payment;
use App\Models\Product;
use App\Models\Shop;
use App\Models\User;
use App\Notifications\AppEmailVerificationNotification;
use App\Notifications\EmailVerificationNotification;
use Illuminate\Http\Request;
use App\Utility\SearchUtility;
use Cache;
use Carbon\Carbon;
use DB;
use Hash;
use Illuminate\Http\Exceptions\HttpResponseException;
use Response;
class ShopController extends Controller
{
public function index(Request $request)
{
$shop_query = Shop::query();
if ($request->name != null && $request->name != "") {
$shop_query->where("name", 'like', "%{$request->name}%");
SearchUtility::store($request->name);
}
return new ShopCollection($shop_query->whereIn('user_id', verified_sellers_id())->paginate(10));
//remove this , this is for testing
//return new ShopCollection($shop_query->paginate(10));
}
public function update(Request $request)
{
$shop = Shop::where('user_id', auth()->user()->id)->first();
$successMessage = 'Shop info updated successfully';
$failedMessage = 'Shop info updated failed';
if ($request->has('name') && $request->has('address')) {
if ($request->has('shipping_cost')) {
$shop->shipping_cost = $request->shipping_cost;
}
$shop->name = $request->name;
$shop->address = $request->address;
$shop->phone = $request->phone;
$shop->slug = preg_replace('/\s+/', '-', $request->name) . '-' . $shop->id;
$shop->meta_title = $request->meta_title;
$shop->meta_description = $request->meta_description;
$shop->logo = $request->logo;
}
if ($request->has('delivery_pickup_longitude') && $request->has('delivery_pickup_latitude')) {
$shop->delivery_pickup_longitude = $request->delivery_pickup_longitude;
$shop->delivery_pickup_latitude = $request->delivery_pickup_latitude;
} elseif (
$request->has('facebook') ||
$request->has('google') ||
$request->has('twitter') ||
$request->has('youtube') ||
$request->has('instagram')
) {
$shop->facebook = $request->facebook;
$shop->instagram = $request->instagram;
$shop->google = $request->google;
$shop->twitter = $request->twitter;
$shop->youtube = $request->youtube;
} elseif (
$request->has('cash_on_delivery_status') ||
$request->has('bank_payment_status') ||
$request->has('bank_name') ||
$request->has('bank_acc_name') ||
$request->has('bank_acc_no') ||
$request->has('bank_routing_no')
) {
$shop->cash_on_delivery_status = $request->cash_on_delivery_status;
$shop->bank_payment_status = $request->bank_payment_status;
$shop->bank_name = $request->bank_name;
$shop->bank_acc_name = $request->bank_acc_name;
$shop->bank_acc_no = $request->bank_acc_no;
$shop->bank_routing_no = $request->bank_routing_no;
$successMessage = 'Payment info updated successfully';
} else {
$shop->sliders = $request->sliders;
}
if ($shop->save()) {
return $this->success(translate($successMessage));
}
return $this->failed(translate($failedMessage));
}
public function sales_stat()
{
$data = Order::where('created_at', '>=', Carbon::now()->subDays(7))
->where('seller_id', '=', auth()->user()->id)
->where('delivery_status', '=', 'delivered')
->select(DB::raw("sum(grand_total) as total, DATE_FORMAT(created_at, '%b-%d') as date"))
->groupBy(DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d')"))
->get()->toArray();
//dd($data->toArray());
//$array_date = [];
$sales_array = [];
for ($i = 0; $i < 7; $i++) {
$new_date = date("M-d", strtotime(($i + 1) . " days ago"));
//$array_date[] = date("M-d", strtotime($i." days ago"));
$sales_array[$i]['date'] = $new_date;
$sales_array[$i]['total'] = 0;
if (!empty($data)) {
$key = array_search($new_date, array_column($data, 'date'));
if (is_numeric($key)) {
$sales_array[$i]['total'] = $data[$key]['total'];
}
}
}
return Response()->json($sales_array);
}
public function category_wise_products()
{
$category_wise_product = [];
$new_array = [];
foreach (Category::all() as $key => $category) {
if (count($category->products->where('user_id', auth()->user()->id)) > 0) {
$category_wise_product['name'] = $category->getTranslation('name');
$category_wise_product['banner'] = uploaded_asset($category->banner);
$category_wise_product['cnt_product'] = count($category->products->where('user_id', auth()->user()->id));
$new_array[] = $category_wise_product;
}
}
return Response()->json($new_array);
}
public function top_12_products()
{
$products = filter_products(Product::where('user_id', auth()->user()->id)
->orderBy('num_of_sale', 'desc'))
->limit(12)
->get();
return new ProductCollection($products);
}
public function info()
{
// dd(auth()->user()->shop);
return new ShopDetailsCollection(auth()->user()->shop);
}
public function pacakge()
{
$shop = auth()->user()->shop;
return response()->json([
'result' => true,
'id' => $shop->id,
'package_name' => $shop->seller_package->name,
'package_img' => uploaded_asset($shop->seller_package->logo)
]);
}
public function profile()
{
$user = auth()->user();
return response()->json([
'result' => true,
'id' => $user->id,
'type' => $user->user_type,
'name' => $user->name,
'email' => $user->email,
'avatar' => $user->avatar,
'avatar_original' => uploaded_asset($user->avatar_original),
'phone' => $user->phone
]);
}
public function payment_histories()
{
$payments = Payment::where('seller_id', auth()->user()->id)->paginate(10);
return SellerPaymentResource::collection($payments);
}
public function collection_histories()
{
$commission_history = CommissionHistory::where('seller_id', auth()->user()->id)->orderBy('created_at', 'desc')->paginate(10);
return CommissionHistoryResource::collection($commission_history);
}
public function store(SellerRegistrationRequest $request)
{
$user = new User;
$user->name = $request->name;
$user->email = $request->email;
$user->user_type = "seller";
$user->password = Hash::make($request->password);
if ($user->save()) {
$shop = new Shop;
$shop->user_id = $user->id;
$shop->name = $request->shop_name;
$shop->address = $request->address;
$shop->slug = preg_replace('/\s+/', '-', str_replace("/", " ", $request->shop_name));
$shop->save();
if (BusinessSetting::where('type', 'email_verification')->first()->value != 1) {
$user->email_verified_at = date('Y-m-d H:m:s');
$user->save();
} else {
try {
$user->notify(new AppEmailVerificationNotification());
} catch (\Exception $e) {
}
}
$authController = new AuthController();
return $authController->loginSuccess($user);
}
return $this->failed(translate('Something Wenr Wrong!'));
}
public function getVerifyForm()
{
$forms = BusinessSetting::where('type', 'verification_form')->first();
return response()->json(json_decode($forms->value));
}
public function store_verify_info(Request $request)
{
$data = array();
$i = 0;
foreach (json_decode(BusinessSetting::where('type', 'verification_form')->first()->value) as $key => $element) {
$item = array();
if ($element->type == 'text') {
$item['type'] = 'text';
$item['label'] = $element->label;
$item['value'] = $request['element_' . $i];
} elseif ($element->type == 'select' || $element->type == 'radio') {
$item['type'] = 'select';
$item['label'] = $element->label;
$item['value'] = $request['element_' . $i];
} elseif ($element->type == 'multi_select') {
$item['type'] = 'multi_select';
$item['label'] = $element->label;
$item['value'] = json_encode($request['element_' . $i]);
} elseif ($element->type == 'file') {
$item['type'] = 'file';
$item['label'] = $element->label;
$item['value'] = $request['element_' . $i]->store('uploads/verification_form');
}
array_push($data, $item);
$i++;
}
$shop = auth()->user()->shop;
$shop->verification_info = json_encode($data);
if ($shop->save()) {
return $this->success(translate('Your shop verification request has been submitted successfully!'));
}
return $this->failed(translate('Something Wenr Wrong!'));
}
}

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use Illuminate\Http\Request;
use CoreComponentRepository;
use App\Models\Category;
use App\Models\Product;
use App\Models\ProductTranslation;
use App\Services\WholesaleService;
use App\Services\ProductTaxService;
use App\Services\ProductFlashDealService;
use App\Http\Requests\WholesaleProductRequest;
use App\Http\Resources\V2\Seller\ProductCollection;
use App\Http\Resources\V2\Seller\WholesaleProductDetailsCollection;
use Auth;
class WholesaleProductController extends Controller
{
public function __construct()
{
}
// Wholesale Products list in Seller panel
public function wholesale_products()
{
$products = Product::where('wholesale_product', 1)->where('user_id', auth()->user()->id)->orderBy('created_at', 'desc');
$products = $products->paginate(15);
return new ProductCollection($products);
}
public function product_store(WholesaleProductRequest $request)
{
if (addon_is_activated('seller_subscription')) {
if (
(auth()->user()->shop->seller_package == null) ||
(auth()->user()->shop->seller_package->product_upload_limit <= auth()->user()->products()->count())
) {
return $this->failed(translate('Upload limit has been reached. Please upgrade your package.'));
}
}
$request->added_by= "seller";
$product = (new WholesaleService)->store($request->except([
'_token', 'tax_id', 'tax', 'tax_type', 'flash_deal_id', 'flash_discount', 'flash_discount_type'
]));
$request->merge(['product_id' => $product->id]);
//VAT & Tax
if ($request->tax_id) {
(new productTaxService)->store($request->only([
'tax_id', 'tax', 'tax_type', 'product_id'
]));
}
// Product Translations
$request->merge(['lang' => env('DEFAULT_LANGUAGE')]);
ProductTranslation::create($request->only([
'lang', 'name', 'unit', 'description', 'product_id'
]));
return $this->success("Product successfully created.");
}
public function product_edit(Request $request, $id)
{
$product = Product::findOrFail($id);
$product->lang = $request->lang == null ? env("DEFAULT_LANGUAGE") : $request->lang;
return new WholesaleProductDetailsCollection($product);
}
public function product_update(WholesaleProductRequest $request, $id)
{
(new WholesaleService)->update($request, $id);
return $this->success(translate('Product has been updated successfully'));
}
public function product_destroy($id)
{
(new WholesaleService)->destroy($id);
return $this->success("Product successfully deleted.");
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Resources\V2\Seller\SellerWithdrawResource;
use Illuminate\Http\Request;
use App\Models\SellerWithdrawRequest;
use Auth;
use Response;
class WithdrawRequestController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$seller_withdraw_requests = SellerWithdrawRequest::where('user_id', auth()->user()->id)->latest()->paginate(10);
return SellerWithdrawResource::collection($seller_withdraw_requests);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
if (auth()->user()->shop->admin_to_pay > 5) {
if ($request->amount >= get_setting('minimum_seller_amount_withdraw') && $request->amount <= Auth::user()->shop->admin_to_pay) {
$seller_withdraw_request = new SellerWithdrawRequest;
$seller_withdraw_request->user_id = auth()->user()->id;
$seller_withdraw_request->amount = $request->amount;
$seller_withdraw_request->message = $request->message;
$seller_withdraw_request->status = '0';
$seller_withdraw_request->viewed = '0';
$seller_withdraw_request->save();
return $this->success(translate('Request has been sent successfully'));
} else {
return $this->failed(translate('Invalid amount'));
}
} else {
return $this->failed(translate('You do not have enough balance to send withdraw request'));
}
}
}