//****************************
//* Aggiornamento Tipo Conto *
//****************************
#include <mov.h>  
#include <rmoviva.h>
#include <nditte.h>
#include "conto.h"      
#include "cg1302.h"  

const int TAgg_tconto::look_reg (const char* cod, int anno)
{
  TTable tab_reg("REG");
  TString codtab;
  codtab.format("%4d%-3s", anno, cod);
  int tipo_reg;

  tab_reg.zero();
  tab_reg.put("CODTAB", codtab);
  if (tab_reg.read() == NOERR)
    tipo_reg = tab_reg.get_int("I0");
  else
    tipo_reg = 0;
  
  return tipo_reg; 
}

bool TAgg_tconto::user_create()
{
  _rel = new TRelation(LF_MOV);
  _rel->add(LF_RMOVIVA, "NUMREG=NUMREG",1);
  _cur = new TCursor(_rel,"",1);
  add_cursor(_cur);
  
  add_file (LF_MOV);
  add_file (LF_RMOVIVA);
  
  _pcon = new TLocalisamfile(LF_PCON);
  _nditte = new TLocalisamfile(LF_NDITTE);
  _tabreg = new TTable("REG"); 
  
  return TRUE;
}

bool TAgg_tconto::user_destroy()
{ 
  delete _rel;
  delete _cur;
  delete _pcon; 
  delete _nditte; 
  delete _tabreg;
  
  return TRUE;
}                                

bool TAgg_tconto::set_print(int)
{
  TMask msk("cg1300a");
  
  while (msk.run() == K_ENTER) 
  {
    setta_intestazione();
    printer().footerlen(5);
    return TRUE;
  }
  return FALSE;
}

void TAgg_tconto::postclose_print()
{
  message_box("Aggiornamento tipo conto completato");
}

bool TAgg_tconto::preprocess_page(int file,int counter)
{
  if (counter) return TRUE;
  
  TCursor* cur = current_cursor();
  if (file == LF_MOV)
  {
    TString16 reg = cur->curr().get(MOV_REG);
    if (reg.empty()) return FALSE;
  } 
  else if (file == LF_RMOVIVA)
  { 
    TRectype pcon(LF_PCON);
    int gruppo = cur->curr(LF_RMOVIVA).get_int(RMI_GRUPPO);
    int conto = cur->curr(LF_RMOVIVA).get_int(RMI_CONTO);
    long sottoconto = cur->curr(LF_RMOVIVA).get_long(RMI_SOTTOCONTO);
    long numreg = cur->curr(LF_RMOVIVA).get_long(RMI_NUMREG);
    int nrigimp = cur->curr(LF_RMOVIVA).get_int("RIGAIMP");
    
    TBill tc (gruppo,conto,0L);
    tc.read(pcon);
    if (!pcon.empty())
      if (pcon.get_char("TMCF") != '\0') 
        return FALSE;
    
    tc.set(gruppo,conto,sottoconto);
    tc.read(pcon);
    if (!pcon.empty())
    {
      if (tc.sospeso())
      {
        set_row(1, "@4g%7ld@23g%3d@31g%3d@37g%3d@45g%6ld  ** Conto sospeso **", 
                numreg, nrigimp, gruppo, conto, sottoconto);
        return TRUE;
      }  
      int t = tc.tipo_cr();  
      TString16 reg = cur->curr().get(MOV_REG);
      int annoiva = cur->curr().get_int(MOV_ANNOIVA);
      const int tipo = look_reg(reg, annoiva); //cerca il tipo del registro
      //aggiorno sul movimento iva il tipo costo/ricavo 
      //con quello letto dal piano conti
      _rel->lfile(LF_RMOVIVA).put(RMI_TIPOCR, t);
      if (tipo == 1 && (t == 2 || t == 3))
        _rel->lfile(LF_RMOVIVA).put(RMI_TIPOCR, 4); 
      _rel->lfile(LF_RMOVIVA).rewrite();
    }
    else
    {
      set_row(1, "@4g%7ld@23g%3d@31g%3d@37g%3d@45g%6ld  ** Conto inesistente **", 
              numreg, nrigimp, gruppo, conto, sottoconto);
      return TRUE;
    }
    return FALSE;     
  }
  return TRUE;
}  

void TAgg_tconto::setta_intestazione()
{
  int soh = 1;       
  TString sep(132);
  TString ragsoc(50);
  
  TLocalisamfile nditte(LF_NDITTE); 
  nditte.zero();
  nditte.put(NDT_CODDITTA, get_firm());   
  if (nditte.read() == NOERR)
    ragsoc  = nditte.get(NDT_RAGSOC); 
  
  reset_header();
  
  sep << "Ditta  " << get_firm();
  sep << " " << ragsoc;

  sep.left_just(132);
  
  set_header (soh++, (const char*) sep);

  sep = "";
  sep << "Data @< Pag.  @#";

  sep.right_just(127);    
  
  sep.overwrite ("AGGIORNAMENTO TIPO CONTO SU MOVIMENTI IVA - Lista errori");
  set_header (soh++, (const char*)sep);
  sep.fill('-');
  set_header (soh++, (const char *) sep);      
  set_header (soh++, "Numero Registrazione  Riga  Gruppo Conto Sottoconto"); 
  set_header (soh++, (const char *) sep);
  set_header (soh, "");
} 
