Classe des opérations automatiques

// 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;
}