Creato funzione di filtraggio e assegnazione categoria in importazione in base alle regole di assegnazione

This commit is contained in:
Amministratore 2025-08-07 08:26:43 +02:00
parent 652f9a7e76
commit f82f65a0c5
6 changed files with 59 additions and 9 deletions

View File

@ -44,7 +44,15 @@ class ImportRuleController extends Controller
'is_active' => 'boolean', 'is_active' => 'boolean',
'created_by' => 'nullable|string|max:255', 'created_by' => 'nullable|string|max:255',
]); ]);
ImportRule::create($request->all()); ImportRule::create(
[
'category_id'=>$request->category_id,
'pattern'=>$request->pattern,
'description'=>$request->description,
'is_active'=>1,
]
);
return redirect()->route('import_rules.index'); // Redirect to the index after storing the rule return redirect()->route('import_rules.index'); // Redirect to the index after storing the rule
} }

View File

@ -381,7 +381,7 @@ class MovimentiController extends Controller
'mov_descrizione' => $line[$this->map['mov_descrizione']], 'mov_descrizione' => $line[$this->map['mov_descrizione']],
'mov_importo_dare' => $line[$this->map['mov_importo_dare']], 'mov_importo_dare' => $line[$this->map['mov_importo_dare']],
'mov_importo_avere' => $line[$this->map['mov_importo_avere']], 'mov_importo_avere' => $line[$this->map['mov_importo_avere']],
'mov_fk_categoria' => '1', 'mov_fk_categoria' => Movimenti::setCategoriesFromCsv($line[$this->map['mov_descrizione']]),
'mov_fk_tags' => 1, 'mov_fk_tags' => 1,
'mov_inserito_da' => Auth::id(), 'mov_inserito_da' => Auth::id(),
'conto_id_da' => 1 'conto_id_da' => 1

View File

@ -8,7 +8,13 @@ use Illuminate\Database\Eloquent\Model;
class ImportRule extends Model class ImportRule extends Model
{ {
use HasFactory; use HasFactory;
protected $fillable = [
'category_id',
'pattern',
'description',
'is_active',
'created_by',
];
// In MovimentiController o direttamente nel model Movimenti // In MovimentiController o direttamente nel model Movimenti

View File

@ -379,9 +379,23 @@ JOIN categories as c ON a.mov_fk_categoria=c.id';
public static function getSuggestedCategory($descrizione) public static function getSuggestedCategory($descrizione)
{ {
$rule = ImportRule::whereRaw('? LIKE CONCAT("%", pattern, "%")', [$descrizione])->first(); $rule = ImportRule::whereRaw('? LIKE CONCAT("%", pattern, "%")', [$descrizione])->first();
return $rule ? $rule->category_id : null; return $rule ? $rule->category_id : 1;
} }
public static function setCategoriesFromCsv($descrizione)
{
$rules = \App\Models\ImportRule::all();
$categoria = 1; // Default category
foreach ($rules as $rule) {
if (preg_match("/$rule->pattern/i", $descrizione)) {
$categoria = $rule->category_id;
break;
}
}
return $categoria;
}

View File

@ -17,9 +17,9 @@ class CategorieSeeder extends Seeder
// Inserisce le categorie necessarie // Inserisce le categorie necessarie
DB::table('categories')->insert( DB::table('categories')->insert(
[ [
'cat_name'=>'Automobili', 'cat_name'=>'Da Selezionare',
'cat_uscita'=>1, 'cat_uscita'=>1,
'cat_entrata'=>0, 'cat_entrata'=>1,
] ]
); );
DB::table('categories')->insert( DB::table('categories')->insert(
@ -30,9 +30,23 @@ class CategorieSeeder extends Seeder
); );
DB::table('categories')->insert( DB::table('categories')->insert(
[ [
'cat_name'=>'Utenze', 'cat_name'=>'Automobili',
'cat_uscita'=>1, 'cat_uscita'=>1,
'cat_entrata'=>0] 'cat_entrata'=>0]
); );
DB::table('categories')->insert(
[
'cat_name'=>'Alimentari',
'cat_uscita'=>1,
'cat_entrata'=>0,
]
);
DB::table('categories')->insert(
[
'cat_name'=>'Utenze',
'cat_uscita'=>1,
'cat_entrata'=>0,
]
);
} }
} }

View File

@ -98,15 +98,23 @@ Route::middleware([
Route::get('admin/movimenti/importgen', [MovimentiController::class,'importFileGen'])->name('importGen'); Route::get('admin/movimenti/importgen', [MovimentiController::class,'importFileGen'])->name('importGen');
Route::post('admin/movimenti/importgen', [MovimentiController::class,'importGenericCsv']); Route::post('admin/movimenti/importgen', [MovimentiController::class,'importGenericCsv']);
Route::post('admin/movimenti/importmapped', [MovimentiController::class,'importmappedCsv'])->name('conti.map.store'); Route::post('admin/movimenti/importmapped', [MovimentiController::class,'importmappedCsv'])->name('conti.map.store');
Route::get('/admin/movimenti/giroconto', [MovimentiController::class,'giroconto'])->name('giroconto');
Route::post('/admin/movimenti/giroconto', [MovimentiController::class,'girocontoPost']);
Route::get('/admin/movimenti/import_rules', [ImportRuleController::class, 'index'])->name('import_rules.index'); Route::get('/admin/movimenti/import_rules', [ImportRuleController::class, 'index'])->name('import_rules.index');
Route::get('/admin/movimenti/import_rules/create', [ImportRuleController::class, 'create'])->name('import_rules.create'); Route::get('/admin/movimenti/import_rules/create', [ImportRuleController::class, 'create'])->name('import_rules.create');
Route::post('/admin/movimenti/import_rules', [ImportRuleController::class, 'store'])->name('import_rules.store'); Route::post('/admin/movimenti/import_rules', [ImportRuleController::class, 'store'])->name('import_rules.store');
Route::get('/admin/movimenti/import_rules/{import_rule}', [ImportRuleController::class, 'show'])->name('import_rules.show');
Route::get('/admin/movimenti/import_rules/{import_rule}/edit', [ImportRuleController::class, 'edit'])->name('import_rules.edit');
Route::put('/admin/movimenti/import_rules/{import_rule}', [ImportRuleController::class, 'update'])->name('import_rules.update');
Route::delete('/admin/movimenti/import_rules/{import_rule}', [ImportRuleController::class, 'destroy'])->name('import_rules.destroy');
Route::resource('admin/conti', ContoController::class); Route::resource('admin/conti', ContoController::class);
Route::get('/admin/movimenti/giroconto', [MovimentiController::class,'giroconto'])->name('giroconto');
Route::post('/admin/movimenti/giroconto', [MovimentiController::class,'girocontoPost']);
// CATEGORIE // CATEGORIE
Route::get('admin/categorie', [CategorieController::class,'listCategorie'])->name('categorie'); Route::get('admin/categorie', [CategorieController::class,'listCategorie'])->name('categorie');
Route::post('admin/categorie', [CategorieController::class,'insCategorie']); Route::post('admin/categorie', [CategorieController::class,'insCategorie']);