ridwan100

doImportChunk

Mar 19th, 2023
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.39 KB | None | 0 0
  1. public function doImportChunk(Request $request)
  2.     {
  3.         try{
  4.            
  5.             $file_md5 = md5($request->get('file'));
  6.             if ($request->get('file') && $request->get('resume') == 1) {
  7.                 $total = Session::get('total_data_import');
  8.                 $prog = $total > 0 ? intval(Cache::get('success_' . $file_md5)) / $total * 100 : 0;
  9.                 $prog = round($prog, 2);
  10.                 if ($prog >= 100) {
  11.                     Cache::forget('success_' . $file_md5);
  12.                 }
  13.                 return response()->json(['progress' => $prog, 'last_error' => Cache::get('error_' . $file_md5)]);
  14.             }
  15.             $select_column = Session::get('select_column');
  16.             $select_column = array_filter($select_column);
  17.             $table_columns = [
  18.                 'brand_name',
  19.                 'brand_logo'
  20.             ];
  21.             $file = base64_decode($request->get('file'));
  22.             $file = storage_path('app/' . $file);
  23.             $user_id = CRUDBooster::myParentId();
  24.             $type = pathinfo($file, PATHINFO_EXTENSION);
  25.             $import = new AdminDrmImportsController;
  26.             $rows = $import->csvToArray($file, $type, 'auto', false);
  27.             $count = 0;
  28.             $existing_brands = ProductBrand::where('user_id',  $user_id)->pluck('brand_name')->toArray();
  29.            
  30.             $new_brand = [];
  31.             try {
  32.                 foreach ($rows as $row) {
  33.                     $count++;
  34.                     Cache::put('success_' . $file_md5, $count);
  35.                     $tmp_data = [];
  36.                     foreach ($table_columns as $key => $value) {
  37.                         if($value == 'brand_name'){
  38.                             $tmp_data[$value] = trim( $row[$select_column[$key]] );
  39.                         }else if($value == 'brand_logo'){
  40.                             $tmp_data[$value] = !empty($select_column[$key]) ? json_encode([$row[$select_column[$key]]]) : ["https://drm.software/Marketing_assets/img/no-product-image.jpg"];
  41.                         }
  42.                        
  43.                     }
  44.                     $tmp_data['user_id'] = $user_id;
  45.                     $tmp_data['created_at'] = Carbon::now()->toDateTimeString();
  46.                     $tmp_data['updated_at'] = Carbon::now()->toDateTimeString();
  47.                     $new_brand[] = $tmp_data;
  48.                 }
  49.                 $brands_unique_name = array_unique(array_map('strtolower', array_column($new_brand, 'brand_name')));
  50.                 $new_brand = array_intersect_key($new_brand, $brands_unique_name);
  51.                 $new_brands = array_filter($new_brand, function ($value) use ($existing_brands) {
  52.                     return !in_array(strtolower($value['brand_name']), array_map('strtolower', $existing_brands));
  53.  
  54.                 });
  55.                 $new_brands = array_values($new_brands);
  56.                
  57.                 $existing_brandss =  ProductBrand::select('brand_name','brand_logo')->whereIn('brand_name', $rows)->get();
  58.                
  59.                 // dd($new_brands[$key]['brand_name']);
  60.                 if($new_brands){
  61.                     collect($new_brands)
  62.                     ->chunk(500)
  63.                     ->each(function($brand_chunk) use($user_id){
  64.                         $brand_chunk = $brand_chunk->toArray();
  65.                         if(CRUDBooster::isSupplier()){
  66.                             ProductBrand::insert($brand_chunk);
  67.  
  68.                                 foreach ($brand_chunk as $value) {
  69.                                     $brand_name = $value['brand_name'];
  70.                                     $brand_id = ProductBrand::where('brand_name', $brand_name)->value('id');
  71.                                     //dd($brand_id);
  72.                                     SupplierBrand::updateOrCreate(['user_id' => $user_id, 'brand_id' => $brand_id], [
  73.                                         'brand_logo' =>$value['brand_logo']
  74.                                     ]);
  75.                             }
  76.                         }
  77.                         else{
  78.                         ProductBrand::insert($brand_chunk);
  79.                         }
  80.                     });
  81.                    
  82.                 } if(CRUDBooster::isSupplier() && !empty($existing_brandss)){
  83.                     $checkSupplierHasBrand = SupplierBrand::select('brand_id')->where('user_id', $user_id)->get()->toArray();
  84.                    
  85.                     foreach ($existing_brandss as $brand) {
  86.                      
  87.                         $brand_id = ProductBrand::where('brand_name', $brand->brand_name)->value('id');
  88.                        
  89.                         if(!in_array($brand_id, $checkSupplierHasBrand)){
  90.                         SupplierBrand::updateOrCreate(['user_id' => $user_id, 'brand_id' => $brand_id], [
  91.                             'brand_logo' => $brand->brand_logo
  92.                         ]);
  93.                     }
  94.                     }
  95.                 }
  96.                 return response()->json(['status' => true, 'message' => "Brand Imported !!!"]);
  97.             }catch(\Exception $e){
  98.                 $e = (string) $e;
  99.                 Cache::put('error_' . $file_md5, $e, 500);
  100.                 return response()->json(['status' => false, 'message' => $e]);
  101.             }
  102.         }catch (\Exception $e) {
  103.             return response()->json(['status' => false, 'message' => "Sorry, something went wrong"]);
  104.         }
  105.     }
  106.  
Add Comment
Please, Sign In to add comment