'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, a.mov_importo, a.mov_descrizione, c.cat_name, t.tag_name, (SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti 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'; public function Conto() { return $this->belongsTo(Conto::class); } public function User() { return $this->belongsTo(User::class); } public function Categorie() { return $this->belongsTo(Categorie::class); } public function Tags() { return $this->belongsTo(tag::class); } public static function getList() { $expression=DB::raw( 'SELECT a.id, a.mov_data, a.mov_importo_dare, a.mov_importo_avere, a.mov_descrizione, c.cat_name, t.tag_name, co.nomeConto, (SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti 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_da=co.id' ); $query = $expression->getValue(DB::connection()->getQueryGrammar()); return DB::select($query); } public static function getSaldo($date) { return DB::table('movimentis')->whereYear('mov_data','=',$date)->sum('mov_importo'); } public static function getSaldoTot() { return DB::table('movimentis')->sum('mov_importo'); } public static function insSpesa( $request) { DB::table('movimentis')->insert( [ 'mov_data'=>$request->mov_data, 'mov_fk_categoria'=>$request->mov_fk_categoria, 'mov_descrizione'=>$request->mov_descrizione, 'mov_importo'=>'-'.$request->mov_importo, 'mov_fk_tags'=>$request->mov_fk_tags, 'mov_inserito_da'=>$request->userid, 'conto_id'=>$request->conto_id, ]); } public static function giroconto($request){ $requestUscita=$request; $requestEntrata=$request; $requestUscita['conto_id']=$requestUscita->daConto; $requestUscita['mov_fk_tags']=1; $rqUscita = $requestUscita; self::insSpesa($rqUscita); $requestEntrata['conto_id']=$requestEntrata->aConto; $requestEntrata['mov_fk_tags']=1; $rqEntrata = $requestEntrata; self::insEntrata($rqEntrata); unset($requestUscita['daConto']); unset($requestEntrata['aConto']); } public static function insEntrata( $request) { DB::table('movimentis')->insert( [ 'mov_data'=>$request['mov_data'], 'mov_fk_categoria'=>$request['mov_fk_categoria'], 'mov_descrizione'=>$request['mov_descrizione'], 'mov_importo'=>$request['mov_importo'], 'mov_fk_tags'=>$request['mov_fk_tags'], 'mov_inserito_da'=>$request['userid'], 'conto_id'=>$request->conto_id, ]); } public static function export() { return DB::table('movimentis') ->join('categories','movimentis.mov_fk_categoria','=','categories.id') ->join('tags','movimentis.mov_fk_tags','=','tags.id') ->join('contos','movimentis.conto_id','=','contos.id') ->selectRaw('mov_data AS Data,cat_name AS Categoria,tag_name AS Tag,NomeConto AS Conto, mov_descrizione AS Descrizione,mov_importo AS Importo') ->orderBy('Data','asc') ->get(); } public static function reportSpesa($year,$month) { return DB::table('movimentis') ->selectRaw('ABS(Sum(movimentis.mov_importo)) as resoconto, categories.cat_name,categories.id') ->join('categories','movimentis.mov_fk_categoria','=','categories.id') ->where('mov_importo','<',0) ->whereYear('mov_data',$year) ->whereMonth('mov_data',$month) ->groupBy('cat_name','categories.id') ->get(); } public static function reportEntrate($year,$month) { return DB::table('movimentis') ->selectRaw('ABS(Sum(movimentis.mov_importo)) as resoconto, categories.cat_name,categories.id') ->join('categories','movimentis.mov_fk_categoria','=','categories.id') ->where('mov_importo','>',0) ->whereYear('mov_data',$year) ->whereMonth('mov_data',$month) ->groupBy('cat_name','categories.id') ->get(); } public static function getMovimentoById($id) { return DB::table('movimentis') ->join('categories','movimentis.mov_fk_categoria','=','categories.id') ->join('tags','movimentis.mov_fk_tags','=','tags.id') ->where('movimentis.id','=',$id) ->get(); } public static function updateMovimenti($request) { DB::table('movimentis') ->where('id','=', $request['id']) ->update([ 'mov_data' => $request['mov_data'], 'mov_fk_categoria'=>$request['mov_fk_categoria'], 'mov_descrizione'=>$request['mov_descrizione'], 'mov_importo'=>$request['mov_importo'], 'mov_fk_tags'=>$request['mov_fk_tags'], 'mov_inserito_da'=>$request['userid'], ]); } public static function deleteMovimento($id) { DB::table('movimentis') ->where('id','=', $id) ->delete(); } public static function listByCatMonth($month,$cat,$year) { $expression= DB::raw('SELECT a.id, a.mov_data, a.mov_importo, a.mov_descrizione, c.cat_name, t.tag_name, (SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti 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 WHERE Month(a.mov_data)='.$month.' AND Year(a.mov_data)='.$year.' AND a.mov_fk_categoria='.$cat ); $query = $expression->getValue(DB::connection()->getQueryGrammar()); return DB::select($query); } public static function listByCategory($cat) { $expression=DB::raw(' SELECT a.id, a.mov_data, a.mov_importo, a.mov_descrizione, c.cat_name, t.tag_name, (SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti 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 WHERE a.mov_fk_categoria = '.$cat ); $query = $expression->getValue(DB::connection()->getQueryGrammar()); return DB::select($query); } public static function getByTag($tag) { $expression=DB::raw('SELECT a.id, a.mov_data, a.mov_importo, a.mov_descrizione, c.cat_name, t.tag_name, (SELECT Count(entity_id) as quanti FROM gen_docs WHERE entity=0 AND entity_id = a.id) as quanti 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 WHERE a.mov_fk_tags = '.$tag ); $query = $expression->getValue(DB::connection()->getQueryGrammar()); return DB::select($query); } public static function importEstrattoIng($filename) { $inputPath='/var/www/html/gestionale2025/storage/app/public/'.$filename; // $outputPath='/var/www/html/gestionale_mt/public/tenant'.tenant('id').'/import/'.$filename.'.csv'; $outputPath = $inputPath.'.csv'; rename($inputPath,$outputPath); $collection = (new FastExcel)->configureCsv(";")->import($outputPath, function ($line){ if($line['DATA VALUTA']) { if($line['ENTRATE']!=null) { $importo = $line['ENTRATE']; } elseif($line['USCITE']!=null) { $importo = $line['USCITE']; } $euro=str_replace(',','.',str_replace('+','',str_replace('.','', $importo))); list($giorno,$mese,$anno) = explode('/',$line['DATA VALUTA']); $data="$anno-$mese-$giorno"; self::insEntrata([ 'mov_data'=>self::dateFormat(0,$line['DATA VALUTA']), 'mov_fk_categoria'=>1, 'mov_descrizione'=>$line['DESCRIZIONE OPERAZIONE'], 'mov_importo'=>$euro, 'mov_fk_tags'=>1, 'userid'=>1, ]); } }); unlink($outputPath); } public static function importEstrattoCR($filename) { $inputPath='/var/www/html/gestionale2025/storage/app/public/'.$filename; // $outputPath='/var/www/html/gestionale_mt/public/'.tenant('id')."/app/".$filename; $outputPath = $inputPath.'.csv'; rename($inputPath,$outputPath); //$outputPath="/var/www/html/gestionale_mt/storage/tenant".tenant('id')."/app/".$filename; $collection = (new FastExcel)->configureCsv(';')->import($outputPath, function ($line){ if($line['VALUTA']) { if($line['DARE']<>'') { $dati=[ 'mov_data'=>self::dateFormat(0,$line['VALUTA']), // date_format(date_create($movimento->mov_data),'d/m/Y' // 'mov_data'=>date_format(date_create($line['VALUTA']),'Y-m-d'), 'mov_fk_categoria'=>1, 'mov_descrizione'=>$line['DESCRIZIONE OPERAZIONE'], 'mov_importo'=>'-'.trim(str_replace(',','.',(str_replace('.','',$line['DARE'])))), 'mov_fk_tags'=>1, 'userid'=>1, ]; } if($line['AVERE']<>'') { $dati=[ 'mov_data'=>self::dateFormat(0,$line['VALUTA']), //'mov_data'=>date_format(date_create($line['VALUTA']),'Y-m-d'), 'mov_fk_categoria'=>1, 'mov_descrizione'=>$line['DESCRIZIONE OPERAZIONE'], 'mov_importo'=>trim(str_replace(',','.',(str_replace('.','',$line['AVERE'])))), 'mov_fk_tags'=>1, 'userid'=>1, ]; } self::insEntrata($dati); } }); unlink($outputPath); } // Test filtri categoria public static function retrieveHeaders($filename) { $inputPath= Storage::path($filename); $outputPath = $inputPath.'.csv'; rename($inputPath,$outputPath); $rows = (new FastExcel)->configureCsv(';')->import($outputPath); $headers = array_keys($rows->first()); return $headers; } public static function getDbFields() { return [ "Data movimento"=>"mov_data", "Descrizione"=>"mov_descrizione", "Importo Dare"=>"mov_importo_dare", "Importo Avere"=>"mov_importo_avere", "Categoria"=>"mov_fk_categoria", "Tag"=>"mov_fk_tags", "Conto prelievo"=>"conto_id_da", "Conto versamento"=>"conto_id_a", ]; } // Test applicazione regole public function setCategoriaMovimento($movimento) { $rules= \App\Models\ImportRule::all(); foreach ($rules as $role) { if (preg_match("/$role->parola/i","$movimento->descrizione")) { $movimento->catemov_fk_categoria=$role->categoria_id; } else { $movimento->catemov_fk_categoria=1; } } } public static function getSuggestedCategory($descrizione) { $rule = ImportRule::whereRaw('? LIKE CONCAT("%", pattern, "%")', [$descrizione])->first(); 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; } public static function getYearsFromMovimenti() { $anni=DB::table('movimentis')->select(DB::raw('DISTINCT YEAR(mov_data) as anno'))->get(); // dd($anni); // for test purposes return $anni; } private static function dateFormat($type,$string) { // $string=(string)$string; if($type) { // $string=$string->format('Y-m-d'); list($year,$month,$day) = explode('-',$string); return $day.'/'.$month.'/'.$year; } else { // $string=$string->format('d/m/Y'); list($day,$month,$year) =explode('/',$string); return $year.'-'.$month.'-'.$day; } } public static function getEntrate($year) { $entrate_anno=DB::table('movimentis') ->where('mov_importo','>',0) ->whereYear('mov_data', '=' , $year) ->sum('mov_importo'); //->get(); return $entrate_anno; } public static function getUscite($year) { $uscite_anno=DB::table('movimentis') ->where('mov_importo','<',0) ->whereYear('mov_data', '=' , $year) ->sum('mov_importo'); //->get(); return ($uscite_anno); } }