ProductController.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace Packages\Product\Http\Controllers;
  3. use Carbon\Carbon;
  4. use Illuminate\Support\Facades\Auth;
  5. use App\Http\Controllers\Controller;
  6. use Facade\Ignition\Support\Packagist\Package;
  7. use Illuminate\Database\Eloquent\Builder;
  8. use Illuminate\Support\Facades\Facade;
  9. use Illuminate\Support\Facades\File;
  10. use Illuminate\Support\Facades\Storage;
  11. use Illuminate\Support\Str;
  12. use Packages\Product\Models\Attribute;
  13. use Packages\Product\Models\Draft;
  14. use Packages\Product\Http\Requests\ProductRequest;
  15. use Packages\Product\Http\Requests\ProductRequestEdit;
  16. use Packages\Product\Models\Product;
  17. use Illuminate\Http\Request;
  18. use App\Models\Category;
  19. use App\Models\Upload;
  20. use Packages\Product\Models\Temp;
  21. use phpDocumentor\Reflection\Types\Compound;
  22. class ProductController extends Controller
  23. {
  24. public function __construct()
  25. {
  26. }
  27. // *******************************************show page product ************
  28. public function index()
  29. {
  30. $categories = Category::orderBy('id', 'DESC')->get();
  31. $draft = Draft::orderBy('id', 'DESC')->first();
  32. $products = Product::query()->orderBy('id', 'DESC');
  33. if (request()->has('productCategory') && request('productCategory') != '')
  34. $products = $products->whereHas('categories', function (Builder $query) {
  35. $query->whereRaw('id = ?', [request('productCategory')]);
  36. });
  37. if (request()->has('productStatus') && request('productStatus') != '')
  38. $products = $products->whereRaw('status = ?', [request('productStatus')]);
  39. if (request()->has('productName') && request('productName') != '')
  40. $products = $products->whereRaw('title = ?', [request('productName')]);
  41. if (request()->has('creatorId') && request('creatorId') != '')
  42. $products = $products->whereHas('user', function (Builder $query) {
  43. $query->whereRaw('name= ?', [request('creatorId')]);
  44. });
  45. $products = $products->paginate();
  46. return view('product::index', compact('products', 'categories', 'draft'));
  47. }
  48. //**************************************************** page create products *****************
  49. public function create(Request $request)
  50. {
  51. return view('product::product.create');
  52. }
  53. // *********************************************************save products ******************
  54. public function store(ProductRequest $request)
  55. {
  56. $data = [
  57. 'title' => $request->title,
  58. 'slug' => $request->slug,
  59. 'ReleaseStatus' => $request->ReleaseStatus,
  60. 'type' => $request->type,
  61. 'discription' => $request->discription,
  62. 'creator_id' => auth()->user()->id,
  63. ];
  64. $product = Product::create($data);
  65. $view = 'create';
  66. if ($product->type === 'ساده'){
  67. $view = 'saveProductStepTwo';
  68. }elseif ($product->type ==='متغیر'){
  69. $view = 'productStepVariable';
  70. }elseif ($product->type === 'باندل'){
  71. $view = 'productStepVariable';
  72. }
  73. $msg = 'ذخیره محصول با موفقیت انجام شد ';
  74. return redirect()->route($view, $product->id)->with('success', $msg);
  75. }
  76. public function productStepTwo($id)
  77. {
  78. $product = $this->productChecker($id);
  79. if ($product != false){
  80. $msg = 'ذخیره محصول با موفقیت انجام شد ';
  81. return view('product::product.simpleEditProduct', compact('product'))->with('success', $msg);
  82. }else{
  83. return abort(419);
  84. }
  85. }
  86. public function productStepVariable(Request $request, $id)
  87. {
  88. $attributes = Attribute::orderBy('id')->where('use_in_veriation', 1)->get();
  89. $attributables = \DB::table('attributables')->where('val_attribute', true)->get();
  90. // dd($attributables->val_attribute);
  91. $product = $this->productChecker($id);
  92. if ($product != false){
  93. $msg = 'ذخیره محصول با موفقیت انجام شد ';
  94. return view('product::product.variableProduct', compact('product', 'attributes', 'attributables'))->with('success', $msg);
  95. }else{
  96. return abort(419);
  97. }
  98. }
  99. public function productStepThree(Request $request)
  100. {
  101. $product = $this->productChecker($request->product_id);
  102. if ($product != false){
  103. $request->validate([
  104. 'title' => 'required',
  105. 'slug' => 'required',
  106. 'ReleaseStatus' => 'required',
  107. 'discription' => 'required',
  108. 'sku' => 'required',
  109. 'status' => 'required',
  110. 'price' => 'required',
  111. 'sale_price' => 'required',
  112. ]);
  113. /**
  114. * update product
  115. */
  116. $data = [
  117. 'title' => $request->title,
  118. 'slug' => $request->slug,
  119. 'ReleaseStatus' => $request->ReleaseStatus,
  120. 'discription' => $request->discription,
  121. 'creator_id' => auth()->user()->id,
  122. 'sku' => $request->sku,
  123. 'status' => $request->status,
  124. 'price' => $request->price,
  125. 'sale_price' => $request->sale_price,
  126. ];
  127. $product->update($data);
  128. $msg = 'ویرایش محصول با موفقیت انجام شد ';
  129. return redirect(route('products.index'))->with('success', $msg);
  130. }else{
  131. return abort(419);
  132. }
  133. }
  134. public function productChecker($id)
  135. {
  136. $product = Product::where('id', $id)->where('creator_id', Auth::user()->id)->first();
  137. if (!empty($product)){
  138. return $product;
  139. }else{
  140. return false;
  141. }
  142. }
  143. // ******************************************************edit page product*********************************************
  144. public function edit(Product $product)
  145. {
  146. $categories = Category::orderBy('id', 'DESC')->get();
  147. return view('product::product.edit', compact('product', 'categories'));
  148. }
  149. // *******************************************update page product*****************************************
  150. public function update(ProductRequestEdit $request, Product $product)
  151. {
  152. $request->merge([
  153. 'price' => preg_replace('/[^0-9]+/', '', $request->price),
  154. 'sale_price' => preg_replace('/[^0-9]+/', '', $request->sale_price),
  155. ]);
  156. $data = [
  157. 'title' => $request->title,
  158. 'slug' => $request->slug,
  159. 'sku' => $request->sku,
  160. 'price' => $request->price,
  161. 'sale_price' => $request->sale_price,
  162. 'type' => $request->type,
  163. 'ReleaseStatus' => $request->ReleaseStatus,
  164. 'status' => $request->status,
  165. 'discription' => $request->discription,
  166. 'creator_id' => auth()->user()->id,
  167. ];
  168. $product->update($data);
  169. $product->categories()->sync($request->categories);
  170. $msg = 'ویرایش محصول با موفقیت انجام شد ';
  171. return redirect(route('products.index'))->with('success', $msg);
  172. }
  173. //***************************** delete products*****************************************
  174. public function destroy(Product $product)
  175. {
  176. $product->delete();
  177. {
  178. return back();
  179. }
  180. }
  181. //************************delete image in the product**********************
  182. public function destroyFile(Upload $upload)
  183. {
  184. $upload->delete();
  185. $msg = 'حذف عکس محصول با موفقیت انجام شد ';
  186. session()->flash('image_deleted', $msg);
  187. return redirect()->back();
  188. }
  189. // ****************************uploadGallery********************
  190. public function uploadValAttribute(Request $request)
  191. {
  192. $attributes=Attribute::orderBy('title')->get();
  193. $productID = $request->productID;
  194. // dd( [$request->val_attribute]);
  195. $product = Product::where('id', $productID)->first();
  196. $attributes = [];
  197. foreach ( $request->val_attribute as $attr_id => $values ){
  198. $attributes[ $attr_id ] = ['val_attribute' => $values];
  199. }
  200. // dd($attributes);
  201. $product->attributes()->sync($attributes);
  202. //dd($attributesd);
  203. }
  204. }