//*****************************************************
//* Aggiornamento codice attivita' su progressivi IVA *
//*****************************************************
#include <mov.h>
#include "cg1300.h"  
#include "cg1304.h"
#include "cg2103.h"

HIDDEN TAgg_codatt& app() { return (TAgg_codatt&) main_app(); }

bool TAgg_codatt::create()
{
  TApplication::create();
  
  _tab = new TLocalisamfile(LF_TAB);
  
  dispatch_e_menu (BAR_ITEM(1));
  return TRUE;
}

bool TAgg_codatt::destroy()
{ 
  delete _tab;
  
  return TApplication::destroy();
}                                

bool TAgg_codatt::menu(MENU_TAG m)
{
  TProgind* pri;
  TMask msk("cg1300c");
  
  /*
     TConfig conf(CONFIG_DITTA);
     int annoiva = conf.get_int("AnLiIv");
     
     msk.set(F_ANNO, annoiva);  
     */
  while (msk.run() == K_ENTER)
  {
    pri = new TProgind(2,"Aggiornamento in corso...",FALSE,TRUE,50);
    _pass = msk.get_bool(F_PASS);
    if (_pass)
    {   
      _anno = msk.get_int(F_ANNO);   
      _da   = msk.get(F_DA);  //se c'e' _da c'e' anche _a e viceversa
      _a    = msk.get(F_A);   //_da e' la vecchia attivita'
      //_a e' la nuova attivita'
      pri->addstatus(1);
      aggiorna_att("PIM");
      aggiorna_att("PUM");
      aggiorna_att("POM");        
      aggiorna_att("PAM");
      aggiorna_att("PPA");
      aggiorna_att("PLA");
      aggiorna_att("PLM");
    }
    else 
    {
      pri->addstatus(1);
      cancella_rec();
    }  
    pri->addstatus(1);
    msk.reset();
    //msk.reset(F_ANNO);    
    //msk.reset(F_DA);
    //msk.reset(F_A);
    delete pri;
    message_box("Aggiornamento codice attivita' completato");
  }         
  return FALSE;
}  

void TAgg_codatt::cancella_rec()
{
  TTable plm("PLM"); 
  for (plm.first(); !plm.eof(); plm.next()) 
    plm.remove();

  TTable pum("PUM");
  for (pum.first(); !pum.eof(); pum.next()) 
    pum.remove();
  
  TTable pom("POM");  
  for (pom.first(); !pom.eof(); pom.next()) 
    pom.remove(); 

  TTable pam("PAM");    
  for (pam.first(); !pam.eof(); pam.next()) 
    pam.remove();

  TTable ppa("PPA");
  for (ppa.first(); !ppa.eof(); ppa.next()) 
    ppa.remove(); 

  //non e' indicata la vecchia attivita' => :
  TTable pim("PIM");
  for (pim.first(); !pim.eof(); pim.next()) 
  {
    const TString80 codtab = pim.get("CODTAB");
    int anno = atoi(codtab.mid(0,4));
    const TString16 codatt = codtab.mid(4,5);
    const TString16 codreg = codtab.mid(10,3);
    if (codreg.not_empty())
    {
      TRegistro reg(codreg,anno);
      if (!reg.name().empty()) //se esiste quel registro (ma perche' non dovrebbe?)
      {
        const TString16 cda = reg.attivita();
        if (codatt != cda)
        {
          TRectype vecchio (pim.curr());
          TRectype nuovo (pim.curr());
          const TString80 cc = codtab.sub(9);
          TString80 cod;
          cod << anno << cda << cc;
          nuovo.put("CODTAB", cod);
          pim.write(nuovo);
          pim.read(vecchio);
          pim.remove(); 
        }    
      }
    }
  }
  
  TTable pla("PLA");
  for (pla.first(); !pla.eof(); pla.next()) 
    pla.remove(); 
  /***
    TTable rmb("RMB");
    for (rmb.first(); !rmb.eof(); rmb.next()) 
    rmb.remove(); 
    ***/
}

void TAgg_codatt::aggiorna_att(const char* nome)
{
  TTable tab(nome); 
  tab.setkey(1);
  tab.zero();
  TString16 chiave; 
  TString16 old_att(_da); old_att.right_just(5,'0');
  TString16 new_att(_a); new_att.right_just(5,'0');
  chiave << _anno << old_att;
  tab.put("CODTAB", chiave);
  TRectype curr (tab.curr());
  tab.read(_isgteq);
  for (; !tab.eof(); tab.next())
  { 
    if (tab.curr() != curr) break;
    
    const TString80 codtab = tab.get("CODTAB");
    //const TString16 cod_att = codtab.mid(4,5); //e' uguale a old_att
    if (old_att != new_att)
    {
      TRectype vecchio (tab.curr());
      TRectype nuovo (tab.curr());
      const TString80 cc = codtab.sub(9);
      TString80 cod;
      cod << _anno << new_att << cc;
      nuovo.put("CODTAB", cod);
      tab.write(nuovo);
      tab.read(vecchio);
      tab.remove();
    }  
  }
}  

