#!/usr/bin/perl 

# Pas de perl -w pour bénéficier de la conservation des données

use SuperObject;
#use Object;
use clients;
use CGI;
use HTML::Template;
use POSIX qw(mktime);
#use vars qw($societe $typeaction $todo $reaction);

print "Content-type:text/html\n\n";

my $template=HTML::Template->new(filename=>'../template/newCRM.html',die_on_bad_params=>0);

sub jourMoisAnToTsp {
	my ($jour,$mois,$an,$hh,$mn)=@_;
	$jour=substr("0$jour",-2);
	$mois=substr("0$mois",-2);
	$mn=substr("00$mn",-2);
	$hh=substr("00$hh",-2);
	return "$jour/$mois/$an $hh:$mn:00.00 CEST";
}

sub loadFromCGI {
	#print STDERR "\tRécupération :\n";
    my $cgi=shift;
    my $ref_obj=shift;
    for $key (keys(%$ref_obj)) {
		#print STDERR "\t$key =>";
		if ($cgi->param($key)) {
			$ref_obj->{$key}=$cgi->param($key);
			#print STDERR $cgi->param($key)." (modification)";
		} else {
			#print STDERR $ref_obj->{$key};
		}
		#print STDERR "\n";
    }
    return $ref_obj;
}


# -----------------------------------
# ========  INITIALISATIONS :
my $debug=0;
my ($id,$uid,$name,$uidact,$uidsociete,$jour,$mois,$annee,$comment,$enregistre);
my @jourSemaine=qw(Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi);
my @moisAn=qw(Janvier Février Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Décembre);
my @annees=qw(2001 2002 2003 2004 2005);
my $query=new CGI;
my @Lsociete;
my @Lintervenant;
my @Lcontact;
my @Lreaction;
my @Ltypeaction;
my @Ltodo;
my @Lminute;
my @Lheure;
my @Ljour;
my @Lmois;
my @Lannee;

if ( $query->param('action_crm'))  { $uidact=$query->param('action_crm'); }
if ( $query->param('societe'))  { $uidsociete=$query->param('societe'); }
if ( $query->param('enregistre'))  { $enregistre=$query->param('enregistre'); }

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

my $actCRM=new action_crm;
$typeaction=new typeaction;
$societe=new societe;
my $contact=new contact;
$fonction=new fonction;
$reaction=new reaction;
$intervenant=new intervenant;
$todo=new todo_act;

$societe->{name}.="*"; # -> pour héritage


# Chargement d'une instance existante :
if ($uidact) {
    $actCRM->loadByUid($uidact);
	if (!$uidsociete) {
		$contact->loadByUid($actCRM->{contact});
		$uidsociete=$contact->{societe};
	}
	($jour,$mois,$annee,$heure,$mn) =($actCRM->{date}=~m!(..)/(..)/(....) (..):(..)!);
}

# Modif instance par nouvelles données :
$actCRM=&loadFromCGI($query,$actCRM); 

# Cas creation + contact sans societe :
if ($actCRM->{contact} && !$uidsociete) {
	$contact->loadByUid($actCRM->{contact});
	$uidsociete=$contact->{societe};
}

# Gestion des timestamp :
if ( $query->param('minute'))  { $mn=$query->param('minute'); }
if ( $query->param('heure'))  { $heure=$query->param('heure'); }
if ( $query->param('jour'))  { $jour=$query->param('jour'); }
if ( $query->param('mois'))  { $mois=$query->param('mois'); }
if ( $query->param('annee'))  { $annee=$query->param('annee'); }
$actCRM->{date}=&jourMoisAnToTsp($jour,$mois,$annee,$heure,$mn);


# =========== ENREGISTREMENT ================= #
if ($enregistre) {
	if ($uidact) { # modif
		my $strUpdate=$actCRM->strUpdate() || die "Erreur !!";
		print "<hr>".$actCRM->strUpdate()."<hr>";
		print STDERR 'SuperObject'->update("Begin;$strUpdate;COMMIT;");
	} else { # crea
		$actCRM->{datecrea}="$jour/$mois/$annee";
		$actCRM->{datemodif}="$jour/$mois/$annee";
	    my $strInsert=$actCRM->strInsert() || die "Erreur !!";
	    print "<hr>".$strInsert."<hr>";
		my $result = 'SuperObject'->insert("Begin;$strInsert;COMMIT;");
		if (!ref($result)) {
			print "Une erreur est survenue : ".$result;
		}
	}
}


# == données de calendrier ==
# on constitue une liste contenant toutes les données
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =	localtime(time());
my ($inimon,$cur_mois,$cur_day,$cur_year);
$inimon=$mon;
$cur_mois=$mon;
$cur_year=$year;  $annee=$cur_year+1900 if (!$annee);

if ($mois && $mois ne "") {
    my $time=mktime(1, 0, 0, 1,$mois-1,$annee-1900);
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
    $cur_mois=$mois-1;
    $inimon=$mois-1;
    $cur_year=$annee-1900;
} else {
	$mois=$cur_mois+1;
}
$cur_day=1;

while ($cur_mois eq $inimon) {
    #print STDERR "Entrée avec $cur_mois eq $inimon\n";
    my $selected="";
    $selected="selected" if ($jour && $jour eq $cur_day);
    my $tmpStr= $mday." ".$jourSemaine[$wday];
    push @Ljour,{nojour=>$mday,dispjour=>$tmpStr,selected=>$selected};
    $cur_day++;    $cur_mois=$mon;
    my $time=mktime(1, 0, 0, $cur_day,$cur_mois,$cur_year);
    #print STDERR "mktime avec $cur_day,$cur_mois,$year\n";
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
}
pop @Ljour;

for my $i (0..$#moisAn) {
    my $selected="";
	#print STDERR "On teste $i avec $mois\n";
    $selected="selected" if ($mois && ($i+1 == $mois*1)); # ne pas oublier de forcer l'entier...
    push @Lmois,{nomois=>$i+1,dispmois=>$moisAn[$i],selected=>$selected};
}

for my $i (0..$#annees) {
	#print STDERR "Recherche année : $annee\n";
    my $selected="";
    $selected="selected" if ($annees[$i]-1900 eq $cur_year);
    push @Lannee,{noannee=>$annees[$i],dispannee=>$annees[$i],selected=>$selected};
}

for my $i (0..23) {
	my $n=substr("00$i",-2);
    my $selected="";
    $selected="selected" if ($heure && $n eq $heure);
	push @Lheure,{heure=>$n,selected=>$selected};
}

for my $i (00, 15, 30, 45) {
    my $selected="";
    $selected="selected" if ($mn && $i eq $mn);
	push @Lminute,{minute=>$i,selected=>$selected};
}
#--------- Fin Calendrier ---------

# ========= FIN INITIALISATION--------

if ($uidsociete) {
    #print STDERR "uidsociete=$uidsociete\n";
    $contact->map('uid','nom || \' \' || prenom',"where societe=$uidsociete and nom !='' and nom is not null");
} else {
    #print STDERR "Pas de uidsociete\n";
    $contact->map('uid','nom || \' \' || prenom',"where  nom !='' and nom is not null");
}


$todo->map('uid','nom');
$reaction->map('uid','nom');
$intervenant->map('uid','nom || \' \' || prenom'," where datesortie is null");
$typeaction->map('uid','nom');
$societe->map('uid','nom');


# ===== Construction des listes d'option : ==========
my $selected="";
while (my ($key,$val) = each (%{$typeaction->{map}})) {  
    my $selected;
    $selected="selected" if ($key==$actCRM->{typeaction});
    push @Ltypeaction,{uid=>$key,nom=>$val,selected=>$selected}; 
}
@Ltypeaction=sort {$a->{nom} cmp $b->{nom}} @Ltypeaction;

while (my ($key,$val) = each (%{$intervenant->{map}})) {    
    my $selected;
    $selected="selected" if ($key==$actCRM->{intervenant});
    push @Lintervenant,{uid=>$key,nom=>$val,selected=>$selected}; 
}
@Lintervenant=sort {$a->{nom} cmp $b->{nom}} @Lintervenant;

while (my ($key,$val) = each (%{$todo->{map}})) {
    my $selected;
    $selected="selected" if ( $key==$actCRM->{todo_act});
    push @Ltodo,{uid=>$key,nom=>$val,selected=>$selected}; 
}
@Ltodo=sort {$a->{nom} cmp $b->{nom}} @Ltodo;

while (my ($key,$val) = each (%{$societe->{map}})) { 
    my $selected;
    $selected="selected" if ($key eq $uidsociete);
    push @Lsociete,{uid=>$key,nom=>$val,selected=>$selected}; 
}
@Lsociete=sort {$a->{nom} cmp $b->{nom}} @Lsociete;

while (my ($key,$val) = each (%{$contact->{map}})) { 
    my $selected;
    $selected="selected" if ($key eq $actCRM->{contact});
   push @Lcontact,{uid=>$key,nom=>$val,selected=>$selected}; 
}
@Lcontact=sort {$a->{nom} cmp $b->{nom}} @Lcontact;

while (my ($key,$val) = each (%{$reaction->{map}})) {    
    my $selected;
    $selected="selected" if ($key eq $actCRM->{reaction});
    push @Lreaction,{uid=>$key,nom=>$val,selected=>$selected}; 
}
@Lreaction=sort {$a->{nom} cmp $b->{nom}} @Lreaction;

# Chargement :
$template->param(reaction=>\@Lreaction);
$template->param(intervenant=>\@Lintervenant);
$template->param(contact=>\@Lcontact);
$template->param(societe=>\@Lsociete);
$template->param(action=>\@Ltypeaction);
$template->param(afaire=>\@Ltodo);
$template->param(jour=>\@Ljour);
$template->param(mois=>\@Lmois);
$template->param(annee=>\@Lannee);
$template->param(heure=>\@Lheure);
$template->param(minute=>\@Lminute);
$template->param(comment=>$actCRM->{commentaire}) if ($actCRM->{commentaire});
$template->param(action_crm=>$uidact) if ($uidact);

# Affichage :
print $template->output();









