// Opérations automatiques
#include <string.h>
#include <strstrea.h>
#include "fct_base.h"
#include "auto_op.h"
// Constructeur pour creation
Op_Auto::Op_Auto (int Freq_Mois, int Suiv_Mois, int Suiv_Jour,
Fiche &fiche)
{
// Sauvegarde la Fiche type
Fiche_auto = fiche;
// Recupere la date du suivant (L'année est celle courante)
Date_Suivant = TDate (Suiv_Jour, Suiv_Mois, TDate().Year());
Fiche_auto.Date_Op = Date_Suivant;
Fiche_auto.Date_Marquage = TDate (1, 1, ANNEE_NON_MARQ);;
// La frequence
Frequence = Freq_Mois;
}
int Op_Auto::Mise_A_Jour (pctxt contexte)
{
TDate Jour;
Fiche fiche;
int Mois, Annee;
// Regarde la date du jour
if (Date_Suivant < Jour) {
// Il faut realiser l'operation
fiche = Fiche_auto;
fiche.Date_Op = Date_Suivant;
fiche.Date_Marquage = TDate (1, 1, ANNEE_NON_MARQ);
// Modifie le fichier
Ecriture_ligne (contexte->nom_fichier, contexte->suivant++, fiche);
tri_fichier (contexte, contexte->suivant-1);
contexte->solde_reel += fiche.montant;
// Mets a jour la date suivante
Mois = (Date_Suivant.Month()+Frequence)%12 + 1;
Annee = Date_Suivant.Year() + (Date_Suivant.Month()+Frequence-1)/12;
Date_Suivant = TDate (Date_Suivant.Day(), Mois, Annee);
// On le fait tant que c'est nécessaire
Mise_A_Jour (contexte);
return 1;
}
// Pas de modif a effectuer
return 0;
}
ostream & operator << (ostream &out, Op_Auto &M)
{
char Ligne[LONG_VISU+1];
formatte_fiche (M.Fiche_auto, Ligne, 0);
out << Ligne;
return out;
}