#!/usr/bin/perl -w

use SuperObject;
use Object;
use clients;

sub usage {
    print "usage:\n
pas encore clair...
";
} 



#===== mieux que getopts
sub getArgs {
    my @args=@_;
    my $oldKey="";
    my %opts=();
    for $el (@args) {
	if ($el=~/^-/) {
	    $el=~s/-+//g;
	    $opts{$el}="";
	    $oldKey=$el;
	}
	else {
	    $opts{$oldKey}=$el;
	}
    }
    return %opts;
}


sub round{
	my($l_arg1,$l_scale)=@_;
	my $sign=1;
	if ($l_arg1<0) { $l_arg1=-$l_arg1; $sign=-1 ;}
	return 0 if ($l_arg1 == 0);
	my($l_num1,$l_num2) = 0;
	$l_num1 = 10**$l_scale * $l_arg1;
	$l_num2 = int($l_num1);
	$l_num2 = $l_num2 +1 if ($l_num1 - $l_num2 >= 0.5);
	$l_num1 =  $l_num2/10**$l_scale;
	return $l_num1*$sign; 
}


#=============================

#------------------------
#   Gestion des entrées :
my %opts=();
my $debug=0;
my $name;
my $id;
%opts=getArgs(@ARGV);

if((exists $opts{h}) || (exists $opts{help})) {
    &usage();
    exit 0;
}

if (exists $opts{o}) {
    $output=$opts{o};
} else {
    $output="";
}

if (exists $opts{id}) {
    $id=$opts{id};
}

if (exists $opts{name}) {
    $name=$opts{name};
}

#--- Gestion output ----
if ($output) {
    open(OUT,">$output");
    *STDOUT=*OUT;
}
#--------------------------|


my ($DBHOST,$DBNAME,$DBUSER,$DBPWD)=qw(localhost pimengest pimengest pimengest);


my $client=new client;
my $compte=new compte;
my $facture=new factures();
my $cpt;

'SuperObject'->initConnect($DBHOST,$DBNAME,$DBUSER,$DBPWD) || die 'Can t connect !';;

if (!$id && $name) {
	$compte->map('intitule','uid');
	$cpt=$compte->{map}{$name};
} 
elsif ($id && !$name) {
	$compte->map('id','uid');
	$cpt=$compte->{map}{$id};
}
else {
	&usage();exit;
}

$client->map('compte','nom');

my $ecr=new ecriture();
$ecr->map('uid','compte');

my @bagEcr;

my $specialField1='case when action=\'debite\' then round(valeur,2) else 0 end';
my $specialField2='case when action=\'credite\' then round(valeur,2) else 0 end';
my ($totalCredit,$totalDebit);

my $ref_fields=['date',$specialField1,$specialField2,'intitule'];
my $ref_dispfields={ 
	date => {
		denom => 'Date',
		style => 'c' },
	$specialField1 => {
		denom => 'Debit',
		style => 'r' },
	$specialField2 => {
		denom => 'Credit',
		style => 'r' },
	intitule => {
		denom => 'Intitulé',
		style => 'p{8cm}' }
};
@bagEcr=@{'ecriture'->Select("where compte=".$cpt." and date<'01/01/2002' order by date",$ref_fields)};


print <<EOC;
\\documentclass[french,11pt]{article}
\\usepackage[T1]{fontenc}
\\usepackage{times}
\\usepackage{a4}
\\usepackage{babel}
\\usepackage{amssymb}
\\usepackage{graphics}
\\usepackage{graphicx}
\\usepackage{tabularx}
\\usepackage{longtable}
\\usepackage{pifont}
\\usepackage{lastpage}
\\usepackage{doublespace}

\\title{Grand Livre - Client $client->{map}{$cpt}}

\\begin{document}
\\maketitle

EOC

print $facture->printLatexHeader($ref_fields,$ref_dispfields);
print "\\hline\n";
if ($#bagEcr>=0) {
	for $ecriture (@bagEcr) {
		$ecriture->{date}=~s!(..)/(..)/(....)!$2/$1/$3!g;
		print $ecriture->printLatex($ref_fields,$ref_dispfields);
		print "\n\\hline\n";
		$totalDebit+=$ecriture->{$specialField1};
		$totalCredit+=$ecriture->{$specialField2};
	}
}
my $diff=round($totalDebit-$totalCredit,2);
if ($diff>0) {
	$diff=" débiteur $diff"; }
else {
	$diff=" créditeur $diff"; }

print <<EOC;
\\hline 
{\\bf Totaux :} & $totalDebit & $totalCredit & {\\bf Solde $diff}  \\\\ \\hline
\\end{longtable}
\\end{document}

EOC

