#!/usr/bin/perl -w
# file opensave.pl
use Tk;
use strict;
use warnings;
use Tk::BrowseEntry; 
use Tk::LabFrame;
use Storable qw(nstore retrieve);
#use utf8;


#definition des variables
my $select ="";
my $choix;
my $fenetre_message= ();
my %m = ( "Janvier"=>"01" ,  "Février"=>"02", "Mars"=>"03" , "Avril" =>"04", 
		"Mai"=>"05",  "Juin"=>"06", "Juillet"=> "07", "Aout" =>"08", 
		"Septembre"=> "09",  "Octobre"=>"10", "Novembre"=>"11", "Decembre" =>"12" );	
my @data = sort { $m{$a} cmp $m{$b} }keys %m ;	
my $FichierDonnee =();

# Création de la fenêtre
my $mw = new MainWindow(
	-title => 'Calcul de la TVA',
	-background => 'green',);

# Taille minimale de ma fenÃªtre
$mw->minsize( 500, 300 );

# affichage du menu
my $menubar = $mw->Menu(-type => 'menubar');
$mw->configure(-menu => $menubar);
my $mfile = $menubar->cascade(-label => '~configuration', -tearoff => 0);
$mfile->command(-label => '~selectionner le grand livre',
 #               -accelerator => 'Control+o',
                -command => \&open_file);
$mfile->command(-label => '~Sélectionner le répertoire de stockage des résultats',
#                -accelerator => 'Control+s',
                -command => \&selection_repertoire);
my $mexit = $menubar->command(-label => '~Quitter', 
		-command => \&exit ,
		);
		
my $message_accueil = "\nBienvenue dans le programme de calcul de la tva";
 
# Affichage d'un texte
my $label_accueil = $mw->Label(
	-text       => $message_accueil,
	-background => 'green',
	)->pack();

# centrer dans la fenetre
	  centrer_widget($mw);

#creation de la zone mois
	my $zone_mois= $mw->LabFrame(-labelside => 'acrosstop');
	$zone_mois= $mw->LabFrame(-background => 'green'); 

	# creation du menu déroulant
		my $mon_choix ='';
		my $menu_deroulant = $zone_mois->BrowseEntry(
		  -label => 'choisir un mois : ',
		  -choices => [@data],
		  -variable => \$mon_choix,
		  -command => \&report_mois,
		)->pack();

	$zone_mois -> pack();
	
# Ouverture du fichier de données et contrôler sa validité
#	my $FichierDonnee = './data/Grand-Livre gÃ©nÃ©ral.csv';
	if (-s $FichierDonnee ){
	my ( @infos) = stat $FichierDonnee;
	my $mtime = $infos[9]; # date de derniere modif
#	my $ctime =$infos[10]; # date de création

	my $le_time = time;
	$le_time = $le_time- 3600;
	&message1 if $mtime <= $le_time;
}
		       
		       

MainLoop;



#==============================================
#  SUB-ROUTINES
#==============================================
sub open_file {
  my $open = $mw->getOpenFile();
  print qq{You chose to open "$open"\n} if $open;
  $FichierDonnee = $open if $open;
}


sub selection_repertoire {
#	my $widget = MainWindow 
	my $Directory = $mw->chooseDirectory(
  -title      => "Mon titre",   # Titre fenêtre
#  -initialdir => "",         # Répertoire par défaut
 # -mustexist  => 1,             # Le répertoire sélectionné doit exister
);

print $Directory;
}

sub report_mois{
	#creation de la zone calcul
	my $zone_calcul= $mw->LabFrame(-labelside => 'acrosstop',
				-background=>'green');
	$zone_calcul -> pack();
	
	# Affichage d'un texte
	my $label_accueil1 = $zone_calcul->Label(
		-text       => "\nVoulez-vous calculer la tva pour le mois de $mon_choix ?\n",
		-background => 'green',
		)->pack();
	
	# Affichage d'un bouton pour fermer la fenÃªtre
		my $bouton = $zone_calcul->Button(
			-text    => 'Non',
			-command => sub { $zone_calcul->destroy },
			)->pack(-side => 'left', -padx => 50, -pady => 4);
		
		my $decision =$zone_calcul ->Button(
			-text => 'Oui',
			-command =>[\&calcul_tva, "$mon_choix"],
			)->pack( qw/ -padx 1 -pady 10 / );
		
	
}





sub calcul_tva {

	my $mois_calcul=shift;
	&message;
# definition des variables locales	
	my (%data, @tmp, $compte, $mois, $journal ,
		$piece , $libelle , $encais , $nb_encais ,
		$p , $montant_tva0, $montant_tva2, $montant_tva3, $montant_tva4,$tva_decais,
		$encais_ht, $encais_tva0, $encais_tva2, $encais_tva3, $encais_tva4, $decais_tva);
	my ($credit , $debit, $solde);
	my ($tva_achat, $tva_immo, $tva_aut) = ('0', '0','0');	   
	$encais = '0';
	$p = 0;
	($montant_tva0,$montant_tva2, $montant_tva3, $montant_tva4, $tva_decais)= ('0','0','0','0','0');
	($encais_tva0, $encais_tva2, $encais_tva3, $encais_tva4, $decais_tva) = ('0','0','0','0','0');
	my ($c0, $c2, $c3, $c4, $c);
	
	my %tva = ( '0' => 'sans_tva', '44572' => '5,5 %', '44573' => '19,6 %', '44574'=> '7 %', '445663'=> '19,6 %');


#conversion du mois en nombre
	my $m = $m{$mois_calcul};
	my $m1 =$m - '1';
	$m1 = "0$m1" if $m1< '10';
	$m1 = '12' if $m eq '01';

# définition des fichier de sortie
	mkdir $mois_calcul;
	my $result = "./$mois_calcul/tva_$mois_calcul.txt";
	my $fact_non_solde_m = "./data/data_$m";
	my $fact_non_solde_m1 = "./data/data_$m1";
	my $justif = "./$mois_calcul/justif_$mois_calcul.txt";
	unlink $justif;


# ouverture du fichier de données	
	open( FILE, "$FichierDonnee" )
		or die("Impossible d'ouvrir le fichier $FichierDonnee/n$!");
	%data= %{retrieve($fact_non_solde_m1) };
	open my $FILE1, '>>', $justif or die "Impossible d'écrire dans $justif" ;
	
# suppression des ecriture de l'annee derniere
	foreach my $clef(keys %data ){
#print "$clef => $data{$clef}{mois}\n";
		if ($data{$clef}{mois} and $data{$clef}{mois} eq $m ){
			if ( $data{$clef}{credit} eq $data{$clef}{debit} ){
				$data{$clef}{credit} = '0';
				$data{$clef}{debit} = '0';
				delete $data{$clef} ;
#				print "Effacer $clef\n";
			}else{
				$data{$clef}{mois}= '13';
			}
		}
		$data{$clef}{total_encais}='0';	
		
	}	


#recensement des factures de ventes et d'achats
while (<FILE>) {
	@tmp = split('\,', $_);                     # eclater le fichier en champ	
	$compte = $tmp[0] ; 
	$tmp[1] =~ s/\d+\/(\d+)\/\d+/$1/;	
	$mois = $tmp[1];
	$journal= $tmp[2];
	$piece = $tmp[3] ;
	$libelle = $tmp[4] ;
	$debit = $tmp[6] ;
	$credit = $tmp[7] ;
	
	if ($mois eq $m and ($journal eq '"VE"'|| $journal eq '"OD"')
		and ($piece =~ /^"F1/ || $piece =~ /^"FA/ || $piece =~ /^"C1/)
		and $compte =~/^"411/ ){
			$data{$piece}{mois}= $mois ;
			$data{$piece}{libelle}= $libelle ;
			$data{$piece}{tva} = '0';
			$data{$piece}{credit}= '0';
			$data{$piece}{debit}= '0' ;
			$data{$piece}{solde}= $credit - $debit;
			$data{$piece}{encais} = '0';
	}
	
	if ($mois eq $m and ($journal eq '"AC"'|| $journal eq '"OD"')
		and $compte =~/^"401/ ){
			$data{$piece}{mois}= $mois ;
			$data{$piece}{libelle}= $libelle ;
			$data{$piece}{tva} = '100';
			$data{$piece}{credit}= '0';
			$data{$piece}{debit}= '0' ;
			$data{$piece}{solde}= $credit - $debit;
			$data{$piece}{encais} = '0';
	}	
}
close (FILE);


#recensement des encaissements et des taux de tva
open( FILE, "$FichierDonnee" );
while (<FILE>) {
	@tmp = split('\,', $_);                     # eclater le fichier en champ	
	$compte = $tmp[0] ; 
	$tmp[1] =~ s/\d+\/(\d+)\/\d+/$1/;	
	$mois = $tmp[1];
	$journal= $tmp[2];
	$piece = $tmp[3] ;
	$libelle = $tmp[4] ;
	$debit = '0';
	$credit = '0' ;
	$debit = $tmp[6] ;
	$credit = $tmp[7] ;
	
#recensement des taux de tva		
	if ($mois eq $m and $compte eq '"44572"'and $journal eq '"VE"' ){
			$data{$piece}{tva} = '44572';
	};
	if ($mois eq $m and $compte eq '"44573"'and $journal eq '"VE"' ){
		$data{$piece}{tva} = '44573';
	};
	if ($mois eq $m and $compte eq '"44574"' and $journal eq '"VE"'){
		$data{$piece}{tva} = '44574';
	}
	if ($mois eq $m and $compte eq '"445663"' and $journal eq '"AC"'){
		$data{$piece}{tva} = '445663';
	}

#recensement des encaissements	
	if ($mois eq $m and ($journal eq '"BP"'|| $journal eq '"CAIS"') 
		and ($piece =~ /^"F1/ || $piece =~ /^"FA/ || $piece =~ /^"C1/)
		and $compte =~/^"411/ ){
		$encais = $encais + $credit - $debit;
		$nb_encais++;
		
		if ($data{$piece}) {
			$data{$piece}{mois}= $mois ;
			$data{$piece}{credit} = $credit ;	
			$data{$piece}{debit}=$debit ;
			if ($data{$piece}{total_encais}){			
				$data{$piece}{total_encais} = $data{$piece}{total_encais} +$credit - $debit ;
			}else{
				$data{$piece}{total_encais} = $credit - $debit ;
			}
			if ($data{$piece}{solde}){			
				$data{$piece}{solde} = $data{$piece}{solde} +$credit - $debit ;
			}else{
				$data{$piece}{solde} = $credit - $debit ;
			}
			$data{$piece}{encais} = '1';					
		}else {
			$data{$piece}{mois}= $mois ;
			$data{$piece}{libelle}= $libelle ;
			$data{$piece}{tva} = '0';
			$data{$piece}{credit}= $credit;
			$data{$piece}{debit}= $debit ;
			$data{$piece}{total_encais} = $credit - $debit ;
			$data{$piece}{solde} = $credit - $debit ;
			$data{$piece}{encais} = '1';
		}
	}
	
#recensement des decaissements	
	if ($mois eq $m and ($journal eq '"BP"'|| $journal eq '"CAIS"') 
		and $compte =~/^"401/ ){
				
		if ($data{$piece}) {
			$data{$piece}{mois}= $mois ;
			$data{$piece}{credit} =  $credit ;	
			$data{$piece}{debit}=  $debit ;	
			if ($data{$piece}{solde}){			
				$data{$piece}{solde} = $data{$piece}{solde} +$credit - $debit ;
			}else{
				$data{$piece}{solde} = $credit - $debit ;
			}
			$data{$piece}{encais} = '1';					
		}else {
			$data{$piece}{mois}= $mois ;
			$data{$piece}{libelle}= $libelle ;
			$data{$piece}{tva} = '100';
			$data{$piece}{credit}= $credit;
			$data{$piece}{debit}= $debit ;
			$data{$piece}{solde} = $credit - $debit ;
			$data{$piece}{encais} = '1';
		}
	}

#comptabilisation de la tva sur achats 445662
	if ( $compte eq '"445662"' and $mois eq $m and $journal eq '"AC"'){
		$tva_achat = $tva_achat  + $debit - $credit;
		$data{$piece}{piece}= $piece ;
		$data{$piece}{mois}= $mois ;
		$data{$piece}{libelle}= $libelle ;
		$data{$piece}{debit}= $debit ;
		$data{$piece}{credit}= $credit ;
		$data{$piece}{tva}= '11' ;
		$data{$piece}{solde} = '0' ;
		$data{$piece}{pointe} = '1';
	}
	
#comptabilisation de la tva autre que sur achat 445662
	if ( $compte eq '"445662"' and $mois eq $m and $journal ne '"AC"'){
		$tva_aut= $tva_aut  + $debit - $credit;
		$data{$piece}{piece}= $piece ;
		$data{$piece}{mois}= $mois ;
		$data{$piece}{libelle}= $libelle ;
		$data{$piece}{debit}= $debit ;
		$data{$piece}{credit}= $credit ;
		$data{$piece}{tva}= '12' ;
		$data{$piece}{solde} = '0' ;
		$data{$piece}{pointe} = '1';
	}	
	
#comptabilisation de la tva sur immo 44562
	if ($mois eq $m and $compte eq '"44562"'){
		$tva_immo= $tva_immo  + $debit - $credit;
		$data{$piece}{piece}= $piece ;
		$data{$piece}{mois}= $mois ;
		$data{$piece}{libelle}= $libelle ;
		$data{$piece}{debit}= $debit ;
		$data{$piece}{credit}= $credit ;
		$data{$piece}{tva}= '13' ;
		$data{$piece}{solde} = '0' ;
		$data{$piece}{pointe} = '1';
	}
}


# recherche du taux de tva pour chaque encaissement
foreach my $clef(keys %data ){
#print "$clef =>$data{$clef}{encais}=>$data{$clef}{mois}=>$data{$clef}{libelle}=> $data{$clef}{tva}=>$data{$clef}{credit}\n";

	if ($data{$clef}{mois} and $data{$clef}{tva}  eq '0' and $data{$clef}{mois} eq $m and $data{$clef}{encais} eq '1'){
		$encais_tva0 = $encais_tva0 +$data{$clef}{total_encais};
		$c0++;
	};
	if ($data{$clef}{mois} and $data{$clef}{tva}  eq '44572' and $data{$clef}{mois} eq $m and $data{$clef}{encais} eq '1'){
		$encais_tva2 = $encais_tva2 + $data{$clef}{total_encais}  ;
		$c2++;
#		print "$encais_tva2=>$data{$clef}{mois}=>$data{$clef}{libelle}=> $data{$clef}{tva}=>$data{$clef}{credit}=>$data{$clef}{solde}\n";

	};
	if ($data{$clef}{mois} and $data{$clef}{tva}  eq '44573' and $data{$clef}{mois} eq $m and $data{$clef}{encais} eq '1'){
		$encais_tva3 = $encais_tva3 + $data{$clef}{total_encais} ;
		$c3++;
#				print "$encais_tva3=>$data{$clef}{mois}=>$data{$clef}{libelle}=> $data{$clef}{tva}=>$data{$clef}{credit}=>$data{$clef}{solde}\n";

	};
	if ($data{$clef}{mois} and $data{$clef}{tva}  eq '44574' and $data{$clef}{mois} eq $m and $data{$clef}{encais} eq '1'){
		$encais_tva4 = $encais_tva4 + $data{$clef}{total_encais} ;
		$c4++;
	};
	if ($data{$clef}{mois} and $data{$clef}{tva}  eq '445663' and $data{$clef}{mois} eq $m and $data{$clef}{encais} eq '1'){
		$decais_tva= $decais_tva - $data{$clef}{credit} + $data{$clef}{debit} ;
	};

};
#print "$nb_encais = $c0 + $c2 + $c3 + $c4\n";	

# verification d'erreur
	my $diff = $encais - ($encais_tva0 +$encais_tva2 +$encais_tva3 +$encais_tva4);
	$diff =~s/\.(\d+)//;
	if ($diff >= '1'){
		$diff = "erreur : ecart de $diff TTC" ;
	}else{
		$diff = "------" ;
	}

# calcul HT et TVA
	my $ht2 = $encais_tva2 / '1.055';
	$ht2 =~s/(\.\d\d)\d+/$1/;
	$montant_tva2 = $encais_tva2 -$ht2  ;
	$montant_tva2 =~s/(\.\d\d)\d+/$1/;

	my $ht3= $encais_tva3 / '1.196';
	$ht3 =~s/(\.\d\d)\d+/$1/;
	$montant_tva3 = $encais_tva3 -$ht3  ;
	$montant_tva3 =~s/(\.\d\d)\d+/$1/;

	my $ht4= $encais_tva4 / '1.07';
	$ht4 =~s/(\.\d\d)\d+/$1/;
	$montant_tva4 = $encais_tva4 -$ht4  ;
	$montant_tva4 =~s/(\.\d\d)\d+/$1/;

	my $total_tva = $montant_tva2 + $montant_tva3 + $montant_tva4;
	$total_tva =~s/(\.\d\d)\d+/$1/;
	$encais_ht =  $ht2 + $ht3 + $ht4 ;
	
	my $ht_decais = ($decais_tva / '1.196');
	$tva_decais = $decais_tva - $ht_decais;
	$tva_decais =~s/(\.\d\d)\d+/$1/;

	my $total_tva_achat = $tva_achat + $tva_decais + $tva_aut;
	my $total_tva_du = $total_tva_achat + $tva_immo ;
	my $tva_mois = $total_tva - $total_tva_du;
	$tva_mois =~s/(\.\d\d)\d+/$1/;

# Ecrire dans un fichier
	open my $RESULT, '>', $result or die "Impossible d'écrire dans $result";
	print {$RESULT} "

       RECAPITULATIF DE TVA DU MOIS DE $mois_calcul

==================================================================
Encaissement total du mois
	------------------------------------------------------------------
	TOTAL du mois :   \t \tTTC = $encais
	------------------------------------------------------------------

	$diff\t\t$diff\t\t$diff\t\t$diff\t\t$diff
==================================================================
==================================================================
VENTES HT

	
	EXO   \t\t\tHT  =  $encais_tva0 
	------------------------------------------------------------------
	TVA = 19.6 % 	HT  =  $ht3  
	------------------------------------------------------------------
	TVA = 5.5% \t\tHT  =  $ht2  
	------------------------------------------------------------------
	TVA = 7 %    	\tHT  =  $ht4 
	------------------------------------------------------------------


TVA sur ventes
	------------------------------------------------------------------
	TVA = 19.6 % 	TVA  =  $montant_tva3 
	------------------------------------------------------------------
	TVA = 5.5% \t\tTVA  =  $montant_tva2  
	------------------------------------------------------------------
	TVA = 7 %    	\tTVA  =  $montant_tva4 
	------------------------------------------------------------------
		TVA totale  =  $total_tva


==================================================================
ACHATS 

	-------------------------------------------------------
	TVA SUR IMMO   \t=       $tva_immo 
	-------------------------------------------------------
	TOTAL TVA SUR ACHAT = $total_tva_achat 

			TVA SUR DECAISSEMENTS	= $tva_decais  

			TVA SUR ACHATS 	\t= $tva_achat  

			TVA AUTRES 	\t= $tva_aut  
	-------------------------------------------------------
	-------------------------------------------------------
	TOTAL TVA DU = $total_tva_du 
	-------------------------------------------------------
===================================================================
TVA DU POUR LE MOIS DE $mois_calcul      =    $tva_mois";
	
	
close $RESULT or die "Impossible de lire $result";

# imprime les justificatifs de ventes
	print {$FILE1} "JUSTICATIF DU MOIS DE $mois_calcul
================================================================\n";
	for my $i ('0', '44572','44573','44574'){
		print {$FILE1} "
----------------------------------------------------------------
OPERATIONS DE VENTES AVEC UN TAUX DE TVA  a \t$tva{$i}
----------------------------------------------------------------\n";
		foreach my $clef(sort keys %data ){
			if ($data{$clef}{mois} and $data{$clef}{tva} eq $i and $data{$clef}{mois} eq $m
				and ($data{$clef}{credit} ne '0' ||  $data{$clef}{debit} ne '0')){
				print {$FILE1} "\t\t$clef    \t$data{$clef}{libelle}\t$data{$clef}{total_encais}\n";
			}
		}
	}
	for my $i ( '445663'){
		print {$FILE1} "
----------------------------------------------------------------
OPERATIONS D'ACHAT A L'ENCAISSEMENT AVEC UN TAUX DE TVA  a \t$tva{$i}
----------------------------------------------------------------\n";
		foreach my $clef(sort keys %data ){
			if ($data{$clef}{mois} and $data{$clef}{tva} eq $i and $data{$clef}{mois} eq $m
				and ($data{$clef}{credit} ne '0' ||  $data{$clef}{debit} ne '0')){
				print {$FILE1} "\t\t$clef    \t$data{$clef}{libelle}\t\t$data{$clef}{debit}\n";
			}
		}
	}




# nettoyage de la base de donnees
	foreach my $clef(keys %data ){

	#supprimer toutes les pieces qui ont pour mois 13 et qui ne sont pas des factures commerciales
		if ($data{$clef}{mois} and $data{$clef}{mois}eq '13' and (!($clef=~ /^"F1/) || $clef=~ /^"F10/)){
			delete $data{$clef};
#			print "$clef\n";
		}else{
		# supprimer les pieces du mois dernier dont le solde est égal à 0
			if ($data{$clef}{mois} and $data{$clef}{mois}eq $m1){
				delete $data{$clef} if $data{$clef}{solde} and $data{$clef}{solde}eq 0;
			}

		# supprimer toutes les pieces d'achat qui sont pointées
			if ($data{$clef}{pointe} and $data{$clef}{pointe}eq '1'){
				delete $data{$clef};
			}
	
		}
		delete $data{$clef} if $clef eq '"C12262"'|| $clef eq '"3"' || $clef eq '"1"' || $clef =~ /^"F11\// ;
#		delete $data{$clef} if ($clef =~ /^"FA/ || $clef =~ /^"C1/);
#		delete $data{$clef} if !($clef =~ /^"F1/ || $clef =~ /^"FA/ || $clef =~ /^"C1/);
#		delete $data{$clef} if ($data{$clef}{compte} =~ /^"401/) ;
delete $data{$clef} if (!$data{$clef}{mois});
	}

close(FILE);


=cut
#imprimer la base
use Data::Dump qw(pp); # require installation
use Data::Dumper;         # require installation
	# imprimer la table de hash		
		my $href3 = \%data;
#		print "printing apres recharge\n";
		print pp $href3, "\n";
		print "\n";
=cut


nstore \%data, "$fact_non_solde_m"|| die "can't store to $fact_non_solde_m\n";
sleep 2;

  exit;
}
	
sub message{
	my $m =shift;
	my $texte="Veuillez patienter pendant l'exécution de votre commande...\n Cela peut prendre quelques dizaines de secondes,\n merci.\n" ;
	my $fenetre_message= MainWindow->new( );					# Création d'une nouvelle fenêtre -- veuillez patienter
	my $label_accueil = $fenetre_message->Label(				# Affichage d'un texte
		-text       => $texte,
		-background => 'red',
		)->pack();
		

	$fenetre_message->overrideredirect(1);					# Pour enlever les décors
	
	# centrer dans la fenetre
	  centrer_widget($fenetre_message);
}

# Ask a yes/no question.
#
sub message1() {
        my$main_window1 = MainWindow->new( );
        $main_window1->minsize(qw(500 400));
	
	my $texte="\n\nATTENTION\n\n+++++++++++++++++++++++++++++++++++++++++++++++\n\n\nVotre grand livre est assez ancien (plus d'heure),\n\nles dernières modifications effectuées dans la compatibilité ne seront pas prises en compte,\n\nVous devriez mettre à jour ce fichier.
	\n\n-----------------------------------------------------
	\n\n Souhaitez-vous continuer avec ce fichier ?\n\n" ;
#	my $fenetre_message= MainWindow1->new( );					# Création d'une nouvelle fenêtre -- veuillez patienter
	my $label_accueil = $main_window1->Label(				# Affichage d'un texte
		-text       => $texte,
		-background => 'red',
		)->pack();

        my $bottom_frame= $main_window1->Button(-text    => "Oui",
			  -command => sub {  $main_window1->destroy ;},
			  -width => 10,
			 )->pack(-side => 'left', -padx => 100, -pady => 1);
	
        my $bottom_frame1= $main_window1->Button(-text    => "Non",
			  -command => sub { &exit },
			  -width => 10
			 )->pack( -padx => 1, -pady => 50);
			 
	
	$main_window1->overrideredirect(1);					# Pour enlever les décors
	
	# centrer dans la fenetre
	  centrer_widget($main_window1);
	
        MainLoop();
}


#================================================
# But : Centrer un widget automatiquement
#================================================
sub centrer_widget {
	my ( $widget ) = @_;

	# Height and width of the screen
	my $largeur_ecran = $widget->screenwidth();
	my $hauteur_ecran = $widget->screenheight();

	# update le widget pour récupérer les vraies dimensions
	$widget->update;
	my $largeur_widget = $widget->width;
	my $hauteur_widget = $widget->height;

	# On centre le widget en fonction de la taille de l'écran
	my $nouvelle_largeur  = int( ( $largeur_ecran - $largeur_widget ) / 2 );
	my $nouvelle_hauteur  = int( ( $hauteur_ecran - $hauteur_widget ) / 2 );
	$widget->geometry($largeur_widget . "x" . $hauteur_widget 
	. "+$nouvelle_largeur+$nouvelle_hauteur");

	$widget->update;
}