78 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Modules\Admin\App\Imports;
 | |
| 
 | |
| use Carbon\Carbon;
 | |
| use Illuminate\Support\Collection;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use Maatwebsite\Excel\Concerns\ToCollection;
 | |
| 
 | |
| class SATEstadoImport implements ToCollection
 | |
| {
 | |
|     /**
 | |
|      * @param Collection $collection
 | |
|      */
 | |
|     public function collection(Collection $collection)
 | |
|     {
 | |
|         $batchSize = 1000;
 | |
|         $batchData = [];
 | |
|         $processedRows = 0;
 | |
| 
 | |
|         foreach ($collection as $key => $row) {
 | |
|             if ($key < 5 || !$row[1]) {
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             $requestArray = [
 | |
|                 'c_estado' => $row[0],
 | |
|                 'c_pais' => $row[1],
 | |
|                 'nombre_del_estado' => $row[2],
 | |
|                 'fecha_inicio_de_vigencia' => $row[3] ?
 | |
|                     Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[3])) :
 | |
|                     null,
 | |
|                 'fecha_fin_de_vigencia' => $row[4] ?
 | |
|                     Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) :
 | |
|                     null,
 | |
|             ];
 | |
| 
 | |
|             $batchData[] = $requestArray;
 | |
|             $processedRows++;
 | |
| 
 | |
|             if (count($batchData) >= $batchSize) {
 | |
|                 $this->insertBatch($batchData);
 | |
|                 $batchData = [];
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (!empty($batchData)) {
 | |
|             $this->insertBatch($batchData);
 | |
|         }
 | |
| 
 | |
|         echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n";
 | |
|     }
 | |
| 
 | |
|     private function insertBatch(array $batchData)
 | |
|     {
 | |
|         try {
 | |
|             DB::table('sat_estado')->upsert(
 | |
|                 $batchData,
 | |
|                 [
 | |
|                     'c_estado',
 | |
|                     'c_pais',
 | |
|                 ],
 | |
|                 [
 | |
|                     'nombre_del_estado',
 | |
|                     'fecha_inicio_de_vigencia',
 | |
|                     'fecha_fin_de_vigencia',
 | |
|                 ]
 | |
|             );
 | |
|         } catch (\Exception $e) {
 | |
|             echo "Error in batch: " . $e->getMessage() . "\n";
 | |
| 
 | |
|             foreach ($batchData as $row) {
 | |
|                 echo "Row data: " . json_encode($row) . "\n";
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |