diff --git a/app/Http/Controllers/ImportRuleController.php b/app/Http/Controllers/ImportRuleController.php index 53f9525..a8830ee 100644 --- a/app/Http/Controllers/ImportRuleController.php +++ b/app/Http/Controllers/ImportRuleController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Categorie; use App\Models\ImportRule; use Illuminate\Http\Request; @@ -13,6 +14,8 @@ class ImportRuleController extends Controller public function index() { // + $rules = ImportRule::all(); + return view('import_rules.index', compact('rules')); } /** @@ -21,6 +24,11 @@ class ImportRuleController extends Controller public function create() { // + // Return a view to create a new import rule + + $categorie = Categorie::all(); + return view('import_rules.create',compact('categorie')); + //'categories'=>$categorie); } /** @@ -29,6 +37,15 @@ class ImportRuleController extends Controller public function store(Request $request) { // + $request->validate([ + 'pattern' => 'required|string|max:255', + 'category_id' => 'required|exists:categories,id', + 'description' => 'nullable|string|max:255', + 'is_active' => 'boolean', + 'created_by' => 'nullable|string|max:255', + ]); + ImportRule::create($request->all()); + return redirect()->route('import_rules.index'); // Redirect to the index after storing the rule } /** diff --git a/app/Http/Controllers/MovimentiController.php b/app/Http/Controllers/MovimentiController.php index 23bbe5f..b05486f 100644 --- a/app/Http/Controllers/MovimentiController.php +++ b/app/Http/Controllers/MovimentiController.php @@ -13,9 +13,14 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; use Rap2hpoutre\FastExcel\FastExcel; +use Illuminate\Support\Facades\Storage; +use DateTime; + class MovimentiController extends Controller { + public $map; + // Gestione dei movimenti public static function newMovimenti() { $categorie=Categorie::list(); // TODO: da risolvere con jquery nella pagina blade conti.movimenti.list @@ -354,21 +359,41 @@ class MovimentiController extends Controller public function importmappedCsv(Request $request) { //$request->mov_data - foreach($request->mapped as $key => $value) + $mapped=$request['mapping']; + foreach( $mapped as $key => $value) { - if($value!=null) - { - $map=array( - $csv_field=$key, - $db_field=$value, - ); - dd($map); - } - - $mappdCvs=(new FastExcel)->configureCsv(';')->create($request->filename .".new.csv",); + { + $this->map[$key]=$value; + $collection = collect($this->map); + } } - dd($request); + //dd ($this->map,$collection); + + $mappdCvs=(new FastExcel)->configureCsv(';')->import( + Storage::path($request->filename), function($line){ + if(isset($line[$this->map['mov_data']])) + { + + Movimenti::create ( + ['mov_data' => DateTime::createFromFormat( + 'd/m/Y',$line[$this->map['mov_data']]), + 'mov_descrizione' => $line[$this->map['mov_descrizione']], + 'mov_importo_dare' => $line[$this->map['mov_importo_dare']], + 'mov_importo_avere' => $line[$this->map['mov_importo_avere']], + 'mov_fk_categoria' => '1', + 'mov_fk_tags' => 1, + 'mov_inserito_da' => Auth::id(), + 'conto_id_da' => 1 + ,'conto_id_a' => 1, + ] + ); + }; + }); + + // dd($map,$mapped,$request,$collection); + // dd($request); + return redirect(Route('movimenti')); } public function importFile() diff --git a/app/Models/ImportRule.php b/app/Models/ImportRule.php index 0f04a2b..e29c640 100644 --- a/app/Models/ImportRule.php +++ b/app/Models/ImportRule.php @@ -8,4 +8,8 @@ use Illuminate\Database\Eloquent\Model; class ImportRule extends Model { use HasFactory; + + +// In MovimentiController o direttamente nel model Movimenti + } diff --git a/app/Models/Movimenti.php b/app/Models/Movimenti.php index f95bc43..d2be652 100644 --- a/app/Models/Movimenti.php +++ b/app/Models/Movimenti.php @@ -18,6 +18,18 @@ class Movimenti extends Model protected $dates = ['mov_data']; protected $casts = [ 'mov_data'=>'datetime']; + protected $fillable = [ + 'mov_data', + 'mov_fk_categoria', + 'mov_descrizione', + 'mov_importo_dare', + 'mov_importo_avere', + 'mov_inserito_da', + 'mov_fk_tags', + 'conto_id_da', + 'conto_id_a' + ]; + public static $query= 'SELECT a.id, a.mov_data, @@ -57,7 +69,8 @@ JOIN categories as c ON a.mov_fk_categoria=c.id'; 'SELECT a.id, a.mov_data, - a.mov_importo, + a.mov_importo_dare, + a.mov_importo_avere, a.mov_descrizione, c.cat_name, t.tag_name, @@ -66,7 +79,7 @@ JOIN categories as c ON a.mov_fk_categoria=c.id'; FROM movimentis as a JOIN tags as t ON a.mov_fk_tags=t.id JOIN categories as c ON a.mov_fk_categoria=c.id - JOIN contos as co ON a.conto_id=co.id' + JOIN contos as co ON a.conto_id_da=co.id' ); $query = $expression->getValue(DB::connection()->getQueryGrammar()); @@ -335,10 +348,12 @@ JOIN categories as c ON a.mov_fk_categoria=c.id'; return [ "Data movimento"=>"mov_data", "Descrizione"=>"mov_descrizione", - "Importo"=>"mov_importo", + "Importo Dare"=>"mov_importo_dare", + "Importo Avere"=>"mov_importo_avere", "Categoria"=>"mov_fk_categoria", "Tag"=>"mov_fk_tags", - "Conto"=>"conto_id", + "Conto prelievo"=>"conto_id_da", + "Conto versamento"=>"conto_id_a", ]; } @@ -361,6 +376,12 @@ JOIN categories as c ON a.mov_fk_categoria=c.id'; } + public static function getSuggestedCategory($descrizione) + { + $rule = ImportRule::whereRaw('? LIKE CONCAT("%", pattern, "%")', [$descrizione])->first(); + return $rule ? $rule->category_id : null; + } + diff --git a/config/adminlte.php b/config/adminlte.php index 7c476a1..7a8a6d3 100644 --- a/config/adminlte.php +++ b/config/adminlte.php @@ -387,6 +387,11 @@ return [ 'text' => 'Importa Generic CSV', 'route' => 'importGen', ], + [ + 'text' => 'Regole importazione', + 'route' => 'import_rules.index', + // 'can' => ['import_rules'], + ], ], ], diff --git a/database/migrations/2022_02_04_134245_create_movimentis_table.php b/database/migrations/2022_02_04_134245_create_movimentis_table.php index 5954ae3..b6f4a0f 100644 --- a/database/migrations/2022_02_04_134245_create_movimentis_table.php +++ b/database/migrations/2022_02_04_134245_create_movimentis_table.php @@ -20,12 +20,14 @@ class CreateMovimentisTable extends Migration $table->unsignedBigInteger('mov_fk_categoria'); $table->foreign('mov_fk_categoria')->references('id')->on('categories'); $table->longText('mov_descrizione'); - $table->decimal('mov_importo',8,2); + $table->decimal('mov_importo_dare',8,2); + $table->decimal('mov_importo_avere',8,2); $table->unsignedBigInteger('mov_inserito_da'); $table->foreign('mov_inserito_da')->references('id')->on('users'); $table->unsignedBigInteger('mov_fk_tags'); $table->foreign('mov_fk_tags')->references('id')->on('tags'); - $table->foreignId('conto_id')->constrained('contos'); + $table->foreignId('conto_id_da')->constrained('contos')->nullable(); + $table->foreignId('conto_id_a')->constrained('contos')->nullable(); }); } diff --git a/database/migrations/2025_08_05_071946_create_import_rules_table.php b/database/migrations/2025_08_05_071946_create_import_rules_table.php index 3717306..e2d0ff5 100644 --- a/database/migrations/2025_08_05_071946_create_import_rules_table.php +++ b/database/migrations/2025_08_05_071946_create_import_rules_table.php @@ -14,6 +14,13 @@ return new class extends Migration Schema::create('import_rules', function (Blueprint $table) { $table->id(); $table->timestamps(); + $table->string('pattern'); + $table->unsignedBigInteger('category_id'); + $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); + // $table->unique(['pattern', 'category_id'], 'unique_import_rule'); + $table->string('description')->nullable(); // Optional description for the rule + $table->boolean('is_active')->default(true); // Flag to enable/disable the rule + $table->string('created_by')->nullable(); // User who created the rule }); } diff --git a/resources/views/conti/importGeneric.blade.php b/resources/views/conti/importGeneric.blade.php index 0736bd6..230b06e 100644 --- a/resources/views/conti/importGeneric.blade.php +++ b/resources/views/conti/importGeneric.blade.php @@ -7,17 +7,21 @@ @section('content')