// DOVE COMPARE !! SONO STATE FATTE MODIFICHE DA GIANLUCA O GUIDO

// !!              
#include <rectypes.h>
#include <relation.h>
#include <tabutil.h>

int numerazione_definitiva( TLocalisamfile& doc )
{ TTable tabnum( "NUM" );
  TRectype &rec= doc.curr(); 
  
  doc.read( rec, _lock ); 
  TRectype oldrec( doc.curr() );
  tabnum.zero( );
  tabnum.put( "CODTAB", rec.get( "CODNUM" ) );
  int err = tabnum.read( _lock );
  // Modifico la chiave del record passato!
  rec.put( "NDOC", tabnum.get_long( "I1" ) );
  rec.put( "PROVV", "D" );
  // !! Matteo, qui non manca qualcosina!? (tipo, che so', la scrittura del record...)
  if ( err == NOERR )
  {  // Aggiorno la tabella!
    tabnum.put( "I1", tabnum.get_long( "I1" ) + 1 );
    err = tabnum.rewrite();
  }
  doc.read( rec, _unlock );
  
  
  // !! che casino! non si può prendere un record, bloccarlo, cambiargli la chiave,
  // !! riscriverlo e poi sbloccarlo: deve essere letto e duplicato, modificato nella copia
  // !! con la nuova chiave, scritto e cancellato il vecchio (!)... almeno così dice Guido.
  // !! occhio! :-)
  
  err = tabnum.read( _unlock );
  if ( err = NOERR )
  { 
    // carico le righe usando la vecchia chiave
    TRecord_array righe_rec( LF_RIGHEDOC, "NRIGA" );
    righe_rec.read( rec );
    int last = righe_rec.last_row();
    for ( int i = 1; i <= last; i ++ )
    {  // Le aggiorno con la nuova chiave
      TRectype &rigarec = righe_rec.row( i, TRUE );
      rigarec.put( "PROVV", "D" );
      rigarec.put( "NDOC", rec.get( "NDOC" ) );
    }
    righe_rec.write( );
  };
  return err;
};