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;

}