1071 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1071 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <config.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <utility.h>
 | 
						|
#include <urldefid.h>
 | 
						|
#include <execp.h>
 | 
						|
 | 
						|
#include "pagament.h"
 | 
						|
 | 
						|
#include "cg2100.h"
 | 
						|
#include "cg2102.h"
 | 
						|
#include "cg21sld.h"
 | 
						|
 | 
						|
// Nomi dei campi
 | 
						|
#include <mov.h>
 | 
						|
#include <causali.h>
 | 
						|
#include <rcausali.h>
 | 
						|
 | 
						|
TPrimanota_application::TPrimanota_application()
 | 
						|
: _rel(NULL), _lastreg(0), _mode(0), _iva(nessuna_iva), _causale(NULL), _giornale(NULL)
 | 
						|
{
 | 
						|
  memset(_msk, 0, sizeof(_msk));
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
TMask* TPrimanota_application::load_mask(int n)
 | 
						|
{
 | 
						|
  if (_msk[n] != NULL) 
 | 
						|
    return _msk[n];
 | 
						|
 | 
						|
  if (n == 1 || n == 2)
 | 
						|
  {
 | 
						|
    const int d = 3-n;
 | 
						|
    if (_msk[d] != NULL) 
 | 
						|
    {
 | 
						|
      delete _msk[d];
 | 
						|
      _msk[d] = NULL;
 | 
						|
    }  
 | 
						|
  }    
 | 
						|
  
 | 
						|
  TFilename name("cg2100"); name << char(n == 3 ? 'o' : 'a'+n);
 | 
						|
  TMask* m = new TMask(name);
 | 
						|
  
 | 
						|
  switch (n)
 | 
						|
  {
 | 
						|
  case 0:        
 | 
						|
    if (m)
 | 
						|
    {
 | 
						|
      m->set_handler(F_NUMREG, num_handler);
 | 
						|
      m->set_handler(F_CODCAUS, caus_query_handler);
 | 
						|
      m->set_handler(F_DATAREG, datareg_handler);
 | 
						|
      m->set_handler(F_DATACOMP, datacomp_handler);
 | 
						|
 | 
						|
      TConfig c(CONFIG_STUDIO, "cg");  
 | 
						|
 | 
						|
      // Scelta primo campo col focus    
 | 
						|
      _firstfocus = c.get_bool("PoCuDr") ? F_DATAREG : F_CODCAUS;
 | 
						|
      m->first_focus(_firstfocus);
 | 
						|
      
 | 
						|
      // Registra e inserisci immediatamente un nuovo movimento
 | 
						|
      _savenew = !c.get_bool("Cg21SN");
 | 
						|
    }  
 | 
						|
    break;
 | 
						|
  case 2:
 | 
						|
    if (m)
 | 
						|
    {                                    
 | 
						|
      m->set_handler(F_DATADOC, doc_handler); 
 | 
						|
      m->set_handler(F_NUMDOC, doc_handler); 
 | 
						|
      m->set_handler(F_DATA74TER, data74ter_handler); 
 | 
						|
      m->set_handler(F_PROTIVA, protiva_handler);
 | 
						|
      m->set_handler(F_CLIENTE, clifo_handler);
 | 
						|
      m->set_handler(F_FORNITORE, clifo_handler);
 | 
						|
      m->set_handler(F_TOTALE, totale_handler);
 | 
						|
      m->set_handler(F_RITFIS, ritfis_handler);
 | 
						|
      m->set_handler(F_RITSOC, ritsoc_handler);
 | 
						|
      m->set_handler(F_CORRLIRE, corrlire_handler);
 | 
						|
      m->set_handler(F_CORRVALUTA, corrvaluta_handler);
 | 
						|
      m->set_handler(F_CODIVA, main_codiva_handler);
 | 
						|
      m->set_handler(F_OCCASEDIT, occas_handler);
 | 
						|
      m->set_handler(F_SOLAIVA, solaiva_handler);
 | 
						|
      m->set_handler(F_SHEETIVA, iva_handler);
 | 
						|
      m->set_handler(F_CODPAG, codpag_handler);
 | 
						|
      
 | 
						|
      TSheet_field& is = (TSheet_field&)m->field(F_SHEETIVA);
 | 
						|
      is.set_notify(iva_notify);
 | 
						|
      TMask& ism = is.sheet_mask();
 | 
						|
      ism.set_handler(101, imponibile_handler);
 | 
						|
      ism.set_handler(102, codiva_handler);
 | 
						|
      ism.set_handler(103, detrazione_handler);
 | 
						|
      ism.set_handler(104, imposta_handler);
 | 
						|
      ism.set_handler(109, iva_sottoconto_handler);
 | 
						|
      ism.set_handler(209, sheet_clifo_handler);
 | 
						|
      ism.set_handler(309, sheet_clifo_handler); 
 | 
						|
      
 | 
						|
      // add saldaconto
 | 
						|
      TSheet_field& ps = (TSheet_field&)m->field(FS_RATESHEET);
 | 
						|
      ps.set_notify(pag_notify);                        
 | 
						|
      
 | 
						|
    }   
 | 
						|
    _iva_showed = FALSE;
 | 
						|
  case 1:
 | 
						|
    if (m)
 | 
						|
    {  
 | 
						|
      m->first_focus(_firstfocus);
 | 
						|
      m->set_handler(F_DATAREG, datareg_handler);
 | 
						|
      m->set_handler(F_DATACOMP, datacomp_handler);
 | 
						|
      m->set_handler(F_DESCR, descr_handler);
 | 
						|
      m->set_handler(F_CODCAUS, caus_modify_handler);
 | 
						|
      m->set_handler(F_SHEETCG, cg_handler);
 | 
						|
      m->set_handler(F_CAMBIO, cambio_handler);
 | 
						|
      m->set_handler(F_VISVAL, visval_handler);
 | 
						|
 | 
						|
      TSheet_field& cg = (TSheet_field&)m->field(F_SHEETCG);                                                      
 | 
						|
      cg.set_notify(cg_notify);
 | 
						|
      TMask& cgm = cg.sheet_mask();
 | 
						|
      
 | 
						|
      if (n == 1)   // movimento non IVA
 | 
						|
      {                         
 | 
						|
        m->set_handler(S_TOTDOC,   totdoc_handler);
 | 
						|
        m->set_handler(S_SPESE,    speserimb_handler);
 | 
						|
        m->set_handler(S_ALSPESE,  altrespese_handler);
 | 
						|
        m->set_handler(S_ABBATT,   abbatt_handler);
 | 
						|
        m->set_handler(S_ABBPASS,  abbpass_handler);
 | 
						|
        m->set_handler(S_RITPROF,  ritprof_handler);
 | 
						|
        m->set_handler(S_DIFFCAMB, diffcamb_handler);
 | 
						|
      }
 | 
						|
 | 
						|
      cgm.set_handler(101, dareavere_handler);
 | 
						|
      cgm.set_handler(102, dareavere_handler);
 | 
						|
      cgm.set_handler(105, cg_conto_handler);
 | 
						|
      cgm.set_handler(106, suspended_handler);
 | 
						|
      cgm.set_handler(206, sheet_clifo_handler);
 | 
						|
      cgm.set_handler(306, sheet_clifo_handler);
 | 
						|
      cgm.set_handler(112, suspended_handler);
 | 
						|
      cgm.set_handler(113, suspended_handler);
 | 
						|
      cgm.set_handler(213, sheet_clifo_handler);
 | 
						|
      cgm.set_handler(313, sheet_clifo_handler);
 | 
						|
    }  
 | 
						|
    break;
 | 
						|
  case 3:
 | 
						|
    m->set_handler(O_CODICE, occas_code_handler);
 | 
						|
    break;  
 | 
						|
  default:
 | 
						|
    CHECKD(0, "Che cavolo di maschera e' la ", n);
 | 
						|
    break;  
 | 
						|
  }
 | 
						|
 | 
						|
  return _msk[n] = m;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TPrimanota_application::user_create()
 | 
						|
{
 | 
						|
  _tabcom = new TLocalisamfile(LF_TABCOM);
 | 
						|
  _tab = new TLocalisamfile(LF_TAB);
 | 
						|
  _caus = new TLocalisamfile(LF_CAUSALI);
 | 
						|
  _rcaus = new TLocalisamfile(LF_RCAUSALI);
 | 
						|
  _clifo = new TLocalisamfile(LF_CLIFO);
 | 
						|
  _pcon = new TLocalisamfile(LF_PCON);
 | 
						|
  _attiv = new TLocalisamfile(LF_ATTIV);
 | 
						|
  _saldo = new TLocalisamfile(LF_SALDI);
 | 
						|
  _comuni = new TLocalisamfile(LF_COMUNI);
 | 
						|
  _occas = new TLocalisamfile(LF_OCCAS);
 | 
						|
  _nditte = new TLocalisamfile(LF_NDITTE);
 | 
						|
 | 
						|
  _rel = new TMovimentoPN;
 | 
						|
  _rel->add(LF_PARTITE, "NREG=NUMREG", 2);
 | 
						|
  
 | 
						|
  _causale = new TCausale();
 | 
						|
  _giornale = new TLibro_giornale();
 | 
						|
  
 | 
						|
  set_search_field(F_NUMREG);                     // Set field for default search
 | 
						|
 | 
						|
  _pag = NULL;  
 | 
						|
  _pag_rows = NULL;
 | 
						|
  _is_saldaconto = FALSE;
 | 
						|
  
 | 
						|
  load_mask(0);                                   
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TPrimanota_application::save_and_new() const
 | 
						|
{ return _savenew; }
 | 
						|
 | 
						|
 | 
						|
bool TPrimanota_application::user_destroy()
 | 
						|
{ 
 | 
						|
  for (int m = 3; m >= 0; m--)
 | 
						|
    if (_msk[m] != NULL) delete _msk[m];
 | 
						|
  
 | 
						|
  if (_pag) delete _pag;
 | 
						|
 | 
						|
  delete _giornale;  
 | 
						|
  delete _causale;
 | 
						|
  delete _rel;
 | 
						|
  delete _nditte;
 | 
						|
  delete _occas;
 | 
						|
  delete _comuni;
 | 
						|
  delete _saldo;
 | 
						|
  delete _attiv;
 | 
						|
  delete _pcon;
 | 
						|
  delete _clifo;
 | 
						|
  delete _rcaus;
 | 
						|
  delete _caus;
 | 
						|
  delete _tab;
 | 
						|
  delete _tabcom;    
 | 
						|
  
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
// Legge la causale di codice cod ed il relativo registro dell'anno year
 | 
						|
// Certified 99%
 | 
						|
bool TPrimanota_application::read_caus(const char* cod, int year)
 | 
						|
{
 | 
						|
  bool ok = TRUE;
 | 
						|
 | 
						|
  if (cod != NULL)
 | 
						|
    ok = causale().read(cod, year);    
 | 
						|
 | 
						|
  bool nob = FALSE, dob = FALSE;
 | 
						|
  TipoIVA iva = nessuna_iva;
 | 
						|
  _is_saldaconto = FALSE;
 | 
						|
  
 | 
						|
  if (ok)
 | 
						|
  {
 | 
						|
    _is_saldaconto = gestione_saldaconto() && causale().saldaconto();
 | 
						|
    dob = _is_saldaconto | causale().data_doc();
 | 
						|
    nob = _is_saldaconto | causale().num_doc();
 | 
						|
    iva = causale().iva();
 | 
						|
  } 
 | 
						|
 | 
						|
  TMask* m = _msk[iva == nessuna_iva ? 1 : 2];
 | 
						|
  if (m == NULL) return TRUE;
 | 
						|
  
 | 
						|
  const bool ins = m->insert_mode();
 | 
						|
  
 | 
						|
  m->efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL);  // Num. doc. obbligatorio
 | 
						|
  m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria
 | 
						|
  
 | 
						|
  if (iva == nessuna_iva)
 | 
						|
  {   
 | 
						|
    TMask& cgm = cgs().sheet_mask();
 | 
						|
    cgm.set_handler(100, _is_saldaconto ? showpartite_handler : NULL);  // bottoncino riga                                                             
 | 
						|
    cgm.enable(100, _is_saldaconto);
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    m->enable_page(2, _is_saldaconto);
 | 
						|
    
 | 
						|
    m->efield(F_CODPAG).check_type(_is_saldaconto ? CHECK_REQUIRED : CHECK_NORMAL);// Cod. pag. obbligatorio
 | 
						|
    
 | 
						|
    m->show(F_ANNORIF, _is_saldaconto);      // Mostra/nasconde anno e riferimento partita
 | 
						|
    m->show(F_NUMRIF, _is_saldaconto);
 | 
						|
 | 
						|
    m->enable(F_ANNORIF, ins);    // Dis/abilita anno e riferimento partita
 | 
						|
    m->enable(F_NUMRIF, ins); 
 | 
						|
    m->field(F_NUMRIF).set_justify(iva == iva_acquisti ? _num_for : _num_cli);
 | 
						|
    
 | 
						|
    const bool av = causale().reg().agenzia_viaggi();
 | 
						|
    m->show(F_DATA74TER, av);
 | 
						|
    if (!av) m->reset(F_DATA74TER);
 | 
						|
 | 
						|
    if (ins)
 | 
						|
    {
 | 
						|
      const long protiva = causale().reg().protocol() + 1;
 | 
						|
      m->set(F_PROTIVA, protiva); // Aggiorna protocollo IVA
 | 
						|
    }
 | 
						|
  }                     
 | 
						|
 | 
						|
  if (ins && !ci_sono_importi())
 | 
						|
  {
 | 
						|
    cgs().reset();
 | 
						|
    for (int i = 1; i < causale().size(); i++)
 | 
						|
    {
 | 
						|
      const TRectype* rcaus = (TRectype*)causale().objptr(i);
 | 
						|
      if (rcaus == NULL) continue;        // Evita eventuali righe nulle
 | 
						|
 | 
						|
      const int nriga = rcaus->get_int(RCA_NRIGA);
 | 
						|
      if (nriga < 1) continue;            // Considera solo righe reali (non riempimenti)
 | 
						|
      
 | 
						|
      TBill tc; causale().bill(nriga, tc);
 | 
						|
      if (tc.gruppo() < 1) continue;      // Considera solo gruppi validi
 | 
						|
 | 
						|
      if (tc.tipo() > ' ' && tc.ok())
 | 
						|
      {
 | 
						|
        const TBill clifo(0, 0, tc.sottoconto(), tc.tipo());
 | 
						|
        if (clifo.conto() != 0)
 | 
						|
          tc = clifo;
 | 
						|
      }  
 | 
						|
      
 | 
						|
      int err = 0;
 | 
						|
      if (tc.descrizione() == "Sconosciuto") err = 1; else
 | 
						|
        if (tc.sospeso()) err = 2;
 | 
						|
      
 | 
						|
      if (err)
 | 
						|
      {          
 | 
						|
        error_box("Il conto della riga %d della causale e' %s", 
 | 
						|
                  i, err == 1 ? "sconosciuto" : "sospeso");
 | 
						|
        continue;          
 | 
						|
      }
 | 
						|
 | 
						|
      const char sezione = rcaus->get_char(RCA_SEZIONE);
 | 
						|
      const TImporto zero('D', ZERO);
 | 
						|
      const TString80 desc(causale().desc_agg(i));
 | 
						|
 | 
						|
      if (nriga == 1) m->set(F_DESCR, desc);
 | 
						|
      
 | 
						|
      if (iva == nessuna_iva)
 | 
						|
      {      
 | 
						|
        // non si cagano gli importi totali   
 | 
						|
        if (nriga < 8) continue;
 | 
						|
        
 | 
						|
        char tipr = ' ';                   
 | 
						|
        if (_is_saldaconto) switch(nriga)
 | 
						|
        { 
 | 
						|
        case 8:  
 | 
						|
          tipr = 'P'; break;
 | 
						|
        case 9:  
 | 
						|
          tipr = 'A'; break;
 | 
						|
        case 10: 
 | 
						|
          tipr = 'G'; break;
 | 
						|
        case 11: 
 | 
						|
          tipr = 'R'; break;
 | 
						|
        default:
 | 
						|
          tipr = ' '; break;
 | 
						|
        }
 | 
						|
        const int pos = set_cgs_row(-1,zero,tc,desc,tipr);
 | 
						|
        if (sezione > ' ')
 | 
						|
          cgs().disable_cell(pos, sezione == 'A' ? 0 : 1);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        if (nriga >= 2 && nriga <= 9)
 | 
						|
          continue;       // Conti per IVA detraibile e non, ritenute sociali e fiscali
 | 
						|
 | 
						|
        const char tipo = nriga == 1 ? 'T' : ' ';
 | 
						|
        if (nriga == 1 && tc.tipo() > ' ' && tc.ok())
 | 
						|
          m->set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto());
 | 
						|
        set_cgs_row(-1,zero,tc,desc,tipo);
 | 
						|
      }
 | 
						|
    }
 | 
						|
    fill_sheet(*m);
 | 
						|
  }
 | 
						|
  
 | 
						|
  return ok;
 | 
						|
} 
 | 
						|
 | 
						|
 | 
						|
// Certified 100%
 | 
						|
void TPrimanota_application::print()
 | 
						|
{
 | 
						|
  TExternal_app stampa("cg3 -0");
 | 
						|
  stampa.run();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TPrimanota_application::changing_mask(int mode)
 | 
						|
{
 | 
						|
  if (mode == MODE_QUERY) 
 | 
						|
  {
 | 
						|
    const bool flag = _mode != MODE_QUERY; 
 | 
						|
 | 
						|
#if XVT_OS == XVT_OS_WIN    
 | 
						|
    if (flag && _iva != nessuna_iva && !_iva_showed)
 | 
						|
    {         
 | 
						|
      WINDOW w = ivas().parent();
 | 
						|
#if XVT_OS == 400      
 | 
						|
      xvt_vobj_set_visible(w, TRUE);
 | 
						|
      xvt_vobj_raise(w);
 | 
						|
      xvt_app_process_pending_events();
 | 
						|
      xvt_vobj_set_visible(w, FALSE);
 | 
						|
#else 
 | 
						|
      show_window(w, TRUE);
 | 
						|
      set_front_window(w);
 | 
						|
      process_events();
 | 
						|
      show_window(w, FALSE);
 | 
						|
#endif
 | 
						|
      _iva_showed = TRUE;
 | 
						|
    }
 | 
						|
#endif    
 | 
						|
    return flag;
 | 
						|
  }  
 | 
						|
  _iva = iva_errata;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
TMask* TPrimanota_application::get_mask(int mode)
 | 
						|
{
 | 
						|
  int annoes = 0, annoiva = 0;
 | 
						|
  TString16 caus;
 | 
						|
 | 
						|
  _mode = mode;
 | 
						|
 | 
						|
  switch (mode)
 | 
						|
  {
 | 
						|
  case MODE_INS:
 | 
						|
    annoes = _msk[0]->get_int(F_ANNOES);
 | 
						|
    annoiva = _msk[0]->get_int(F_ANNOIVA);
 | 
						|
    caus = _msk[0]->get(F_CODCAUS);
 | 
						|
    break;
 | 
						|
  case MODE_MOD:
 | 
						|
    annoes  = _rel->lfile().get_int("ANNOES");
 | 
						|
    annoiva = _rel->lfile().get_int("ANNOIVA");
 | 
						|
    caus = _rel->lfile().get("CODCAUS");
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    return load_mask(0);
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (giornale().year() != annoes)
 | 
						|
    giornale().read(annoes);
 | 
						|
  
 | 
						|
  if (caus != causale().codice() || causale().reg().year() != annoiva)
 | 
						|
    causale().read(caus, annoiva);              
 | 
						|
  _iva = causale().iva();
 | 
						|
  
 | 
						|
  return load_mask(_iva == nessuna_iva ? 1 : 2); 
 | 
						|
} 
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::on_firm_change()
 | 
						|
{
 | 
						|
  _rel->lfile().last();
 | 
						|
  _lastreg = _rel->lfile().get_long(MOV_NUMREG);  // Init last registration number
 | 
						|
}  
 | 
						|
 | 
						|
void TPrimanota_application::on_config_change()
 | 
						|
{
 | 
						|
  TConfig cnf(CONFIG_DITTA);
 | 
						|
  _ges_val = cnf.get_bool("GesVal");
 | 
						|
  _ges_sal = cnf.get_bool("GesSal");
 | 
						|
  _num_cli = cnf.get_bool("NrCliDx");
 | 
						|
  _num_for = cnf.get_bool("NrForDx");
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::init_mask(TMask& m)
 | 
						|
{
 | 
						|
  disable_menu_item(M_FILE_PRINT);
 | 
						|
  
 | 
						|
  read_caus(NULL, 0);                      // Setta campi obbligatori
 | 
						|
  fill_sheet(m);
 | 
						|
 | 
						|
  const bool valintra = causale().valintra();
 | 
						|
  const bool corrisp = causale().corrispettivi();
 | 
						|
 | 
						|
  if (_iva == nessuna_iva)
 | 
						|
  { 
 | 
						|
    m.enable(-5, _is_saldaconto);            // Abilita campi saldaconto     
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {                        
 | 
						|
    char clig, forg;
 | 
						|
    if (_iva == iva_acquisti)
 | 
						|
    {
 | 
						|
      forg = 's';
 | 
						|
      clig = 'h';
 | 
						|
    } 
 | 
						|
    else
 | 
						|
    {
 | 
						|
      forg = 'h';
 | 
						|
      clig = corrisp ? 'h' : 's';
 | 
						|
    }
 | 
						|
    m.send_key(K_SHIFT+K_CTRL+clig, -1);  // GROUP 1 (clienti)
 | 
						|
    m.send_key(K_SHIFT+K_CTRL+forg, -2);  // GROUP 2 (fornitori)
 | 
						|
    if (corrisp) m.hide(F_STATOPAIV);
 | 
						|
    
 | 
						|
    // Show/Hide campi valuta: F_VALUTAINTRA, F_CAMBIOINTRA, F_CORRLIRE, F_CORRVAL (GROUP 4)
 | 
						|
    m.show(-4, valintra);
 | 
						|
    
 | 
						|
    m.show(F_CODIVA, m.mode() == MODE_INS);  // Codice IVA standard
 | 
						|
  }
 | 
						|
  
 | 
						|
  // Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_VISVAL (GROUP 3)
 | 
						|
  const bool valuta = _ges_val && causale().valuta();
 | 
						|
  m.show(-3, valuta);
 | 
						|
}
 | 
						|
 | 
						|
void TPrimanota_application::init_query_mode(TMask& m)
 | 
						|
{
 | 
						|
  enable_menu_item(M_FILE_PRINT);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::fill_sheet(TMask& m) const
 | 
						|
{
 | 
						|
  TSheet_field& cgs = (TSheet_field&)m.field(F_SHEETCG);
 | 
						|
  for (int r = cgs.items(); r < 16; r++) cgs.row(r);
 | 
						|
 | 
						|
  if (_iva != nessuna_iva)
 | 
						|
  {
 | 
						|
    TSheet_field& ivas = (TSheet_field&)m.field(F_SHEETIVA);
 | 
						|
    for (r = ivas.items(); r < 16; r++) ivas.row(r);
 | 
						|
    ivas.enable_column(2, _iva == iva_acquisti);  // Tipo detrazione
 | 
						|
    ivas.enable_column(4, _iva == iva_acquisti);  // Tipo costo ricavo
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// Ritorna il prossimo numero di registrazione libero
 | 
						|
// Certified 100%
 | 
						|
const char* TPrimanota_application::get_next_key()
 | 
						|
{ 
 | 
						|
  TToken_string k(80);
 | 
						|
  k.add(F_NUMREG); k.add(_lastreg+1);
 | 
						|
  
 | 
						|
  if (_rel->good())                                 // Not reinsert
 | 
						|
  {
 | 
						|
    TMask& m = curr_mask();
 | 
						|
    if (m.insert_mode())
 | 
						|
    {
 | 
						|
      k.add(F_CODCAUS);  k.add(m.get(F_CODCAUS));   // Ricopia causale
 | 
						|
      k.add(F_DATAREG);  k.add(m.get(F_DATAREG));   //         data operazione 
 | 
						|
      k.add(F_DATACOMP); k.add(m.get(F_DATACOMP));  //              competenza
 | 
						|
      k.add(F_DATADOC);  k.add(m.get(F_DATADOC));   //              documento
 | 
						|
      
 | 
						|
      if (iva() == iva_vendite)
 | 
						|
      {
 | 
						|
        const long n = m.get_long(F_NUMDOC);
 | 
						|
        if (n > 0)
 | 
						|
        { k.add(F_NUMDOC); k.add(n+1); }            // incrementa numero documento
 | 
						|
      }  
 | 
						|
    }  
 | 
						|
  }  
 | 
						|
 | 
						|
  return strcpy(__tmp_string, k);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::init_insert_mode(TMask& m)
 | 
						|
{
 | 
						|
  init_mask(m);             
 | 
						|
  if (causale().reg().agenzia_viaggi())
 | 
						|
    m.set(F_DATA74TER, m.get(F_DATAREG));              
 | 
						|
  
 | 
						|
  if (iva() != nessuna_iva)
 | 
						|
  {
 | 
						|
    occas_mask().reset();
 | 
						|
 | 
						|
    const TString16 dt(m.get(F_DATAREG));
 | 
						|
    set_pagamento(NULL,dt);  
 | 
						|
    set_scadenze(m);
 | 
						|
  }  
 | 
						|
 | 
						|
  _saldi.reset();                        // Inizializza saldi
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::init_modify_mode(TMask& m)
 | 
						|
{
 | 
						|
  init_mask(m);
 | 
						|
  calcola_saldo();          // Verifica eventuali sbilanci contabili
 | 
						|
  if (iva() != nessuna_iva)
 | 
						|
    calcola_imp();          // Calcola totale imponibile ed imposte
 | 
						|
}
 | 
						|
 | 
						|
// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE) 
 | 
						|
// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale
 | 
						|
bool TPrimanota_application::test_swap(bool ritsoc)
 | 
						|
{
 | 
						|
  bool s = FALSE;
 | 
						|
 | 
						|
  const char sez = ritsoc ? causale().sezione_ritsoc() : causale().sezione_clifo();
 | 
						|
  s = (iva() == iva_vendite) ^ sez == 'D';
 | 
						|
  return s;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int TPrimanota_application::read(TMask& m)
 | 
						|
{   
 | 
						|
  m.autoload(_rel);
 | 
						|
  
 | 
						|
  cgs().reset();
 | 
						|
 | 
						|
  if (iva() != nessuna_iva)
 | 
						|
  { 
 | 
						|
    ivas().reset();
 | 
						|
    
 | 
						|
    const TString16 occode(_rel->lfile().get("OCFPI"));
 | 
						|
    occas_mask().set(O_CODICE, occode);
 | 
						|
 | 
						|
    const char clifo = _rel->lfile().get_char("TIPO");
 | 
						|
    if (_iva == iva_acquisti && clifo == 'C')
 | 
						|
      error_box("Registrazione di acquisto attribuita ad un cliente"); else
 | 
						|
        if (_iva == iva_vendite && clifo == 'F')
 | 
						|
          error_box("Registrazione di vendita attribuita ad un fornitore");
 | 
						|
  }
 | 
						|
 | 
						|
  // Inizializza cambio
 | 
						|
  real cambio(_rel->lfile().get("CAMBIO"));
 | 
						|
  if (cambio < 1.0) cambio = 1.0;
 | 
						|
  m.set_exchange(FALSE, cambio);      
 | 
						|
 | 
						|
  _saldi.reset();                                // Azzera saldi
 | 
						|
  _saldi.set_movprovv(_rel->lfile().get_bool("PROVVIS"));
 | 
						|
  _saldi.set_movap(causale().apertura());
 | 
						|
  _saldi.set_anno_es(m.get_int(F_ANNOES));
 | 
						|
  _saldi.set_num_ulmov(m.get_long(F_NUMREG));
 | 
						|
  _saldi.set_data_ulmov((TDate)m.get(F_DATAREG));
 | 
						|
 | 
						|
 | 
						|
  TToken_string riga(255);
 | 
						|
  
 | 
						|
  for (int i = 0; i < _rel->cg_items(); i++)
 | 
						|
  {
 | 
						|
    const TRectype& r = _rel->cg(i);
 | 
						|
    riga.cut(0);                                 // Vuota la riga
 | 
						|
 | 
						|
    const char sezione = toupper(r.get_char("SEZIONE"));
 | 
						|
    const real im(r.get_real("IMPORTO"));
 | 
						|
    
 | 
						|
    TImporto import(sezione, im);
 | 
						|
    import.add_to(riga);                         // Dare/Avere 101-102
 | 
						|
 | 
						|
    TBill conto; conto.get(r);
 | 
						|
    riga.add(conto.string(0x3));                 // Conto 103-107
 | 
						|
    _saldi.aggiorna(conto, im, sezione, FALSE);
 | 
						|
    
 | 
						|
    riga.add("");                                // Codice descrizione 108
 | 
						|
    riga.add(r.get("DESCR"));                    // Descrizione riga 109
 | 
						|
 | 
						|
    conto.set(r.get_int("GRUPPOC"), r.get_int("CONTOC"),
 | 
						|
              r.get_long("SOTTOCONTC"), r.get_char("TIPOCC"));
 | 
						|
    riga.add(conto.string(0x3));                 // Contropartita 110-114
 | 
						|
    riga.add(r.get("NUMGIO"));
 | 
						|
    const char tipo = r.get_char("ROWTYPE");         
 | 
						|
    riga.add(tipo);                              // Tipo di riga 115
 | 
						|
    
 | 
						|
    if (iva() == nessuna_iva && tipo > ' ')
 | 
						|
      error_box("Riga %d con tipo incompatibile con un movimento puramente contabile", i+1);
 | 
						|
 | 
						|
    cgs().row(i) = riga;
 | 
						|
    disable_cgs_cells(i, tipo);
 | 
						|
  }
 | 
						|
 | 
						|
  if (_iva == nessuna_iva) 
 | 
						|
    return _rel->status();
 | 
						|
  
 | 
						|
  const bool solaiva = i == 0;
 | 
						|
  m.set(F_SOLAIVA, solaiva ? "X" : " ");
 | 
						|
  m.field(F_SOLAIVA).on_hit();
 | 
						|
  
 | 
						|
  const bool to_swap = test_swap(FALSE);
 | 
						|
  if (to_swap)
 | 
						|
  {
 | 
						|
    real totdoc(m.get(F_TOTALE));  
 | 
						|
    totdoc = -totdoc;
 | 
						|
    m.set(F_TOTALE, totdoc.string());
 | 
						|
  }
 | 
						|
  for (i = 0; i < _rel->iva_items(); i++)
 | 
						|
  {
 | 
						|
    TRectype& r = _rel->iva(i);
 | 
						|
    riga.cut(0);
 | 
						|
    
 | 
						|
    real imponibile(r.get("IMPONIBILE"));
 | 
						|
    if (to_swap) imponibile = -imponibile;
 | 
						|
    riga.add(imponibile.string());       // Imponibile 101
 | 
						|
 | 
						|
    riga.add(r.get("CODIVA"));           // IVA        102
 | 
						|
    riga.add(r.get("TIPODET"));          // Detrazione 103
 | 
						|
 | 
						|
 | 
						|
    real imposta(r.get("IMPOSTA"));
 | 
						|
    if (to_swap) imposta = -imposta;
 | 
						|
    if (imponibile.sign() * imposta.sign() < 0)
 | 
						|
    {
 | 
						|
      warning_box("Registrazione con imponibile e imposta con segni discordi:\n"
 | 
						|
                  "assegnato il segno dell'imponibile");
 | 
						|
      imposta = -imposta;
 | 
						|
    }  
 | 
						|
    riga.add(imposta.string());          // Imposta    104
 | 
						|
 | 
						|
    TBill c; c.get(r);
 | 
						|
    c.add_to(riga, 4, 0x7);              // Conto 105-110
 | 
						|
    
 | 
						|
    ivas().row(i) = riga;
 | 
						|
  }           
 | 
						|
  
 | 
						|
  TString16 dt(m.get(F_DATAREG));
 | 
						|
  set_pagamento(m.get(F_CODPAG),dt);
 | 
						|
  if (!read_scadenze(m))
 | 
						|
    set_scadenze(m);
 | 
						|
  
 | 
						|
  return _rel->status();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// Trasferisce i dati da maschera a movimento di prima nota
 | 
						|
void TPrimanota_application::mask2rel(const TMask& m)
 | 
						|
{
 | 
						|
  m.autosave(_rel);
 | 
						|
  
 | 
						|
  const long numreg = m.get_long(F_NUMREG);
 | 
						|
  const TDate datareg(m.get(F_DATAREG));
 | 
						|
  const int annoes = m.get_int(F_ANNOES);
 | 
						|
 | 
						|
  _saldi.set_movprovv(m.get_bool(F_PROVVISORIO));
 | 
						|
  _saldi.set_movap(causale().apertura());
 | 
						|
  _saldi.set_anno_es(annoes);
 | 
						|
  _saldi.set_num_ulmov(m.get_long(F_NUMREG));
 | 
						|
  _saldi.set_data_ulmov((TDate)m.get(F_DATAREG));
 | 
						|
 | 
						|
  _rel->destroy_rows();                  // Destroy all records
 | 
						|
  cgs_pack();                            // Destroy all null rows
 | 
						|
 | 
						|
  TArray& rows = cgs().rows_array();
 | 
						|
  
 | 
						|
  // Controlla se e' un movimento con righe contabili
 | 
						|
  if (iva() == nessuna_iva || !m.get_bool(F_SOLAIVA))  
 | 
						|
  {                         
 | 
						|
    for (int i = 0; i < rows.items(); i++)
 | 
						|
    {
 | 
						|
      TToken_string& row = (TToken_string&)rows[i];
 | 
						|
 | 
						|
      TImporto n; n = row;                         
 | 
						|
      const TBill conto(row, 2, 0x3);
 | 
						|
      _saldi.aggiorna(conto, n.valore(), n.sezione(), TRUE);
 | 
						|
      
 | 
						|
      TRectype &r = _rel->cg(i);
 | 
						|
      r.zero();
 | 
						|
 | 
						|
      r.put("NUMREG", numreg);              // Numero registrazione
 | 
						|
      r.put("ANNOES", annoes);              // Anno esercizio
 | 
						|
      r.put("DATAREG", datareg);            // Data di registrazione
 | 
						|
      r.put("NUMRIG", i+1);                 // Numero riga
 | 
						|
      
 | 
						|
      r.put("SEZIONE", n.sezione());        // Sezione
 | 
						|
      r.put("IMPORTO", n.valore());         // Importo
 | 
						|
      conto.put(r);                         // Conto
 | 
						|
      
 | 
						|
      row.get();                            // Codice descrizione
 | 
						|
      r.put("DESCR", row.get());            // Descrizione riga
 | 
						|
 | 
						|
      r.put("TIPOCC", row.get());           // Contropartita
 | 
						|
      r.put("GRUPPOC", row.get());
 | 
						|
      r.put("CONTOC", row.get());
 | 
						|
      r.put("SOTTOCONTC", row.get());
 | 
						|
      row.get();                            // Descrizione contropartita
 | 
						|
      r.put("NUMGIO", row.get());           // Numero riga giornale
 | 
						|
      r.put("ROWTYPE", row.get());          // Tipo riga
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (_iva == nessuna_iva) return;
 | 
						|
  
 | 
						|
  if (causale().corrispettivi())
 | 
						|
  {
 | 
						|
    TRectype& rec = _rel->lfile().curr();
 | 
						|
    rec.put("TIPO", ""); 
 | 
						|
    rec.put("CODCF", "");  // Azzera il cliente nei movimenti dei corrispettivi
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    _rel->lfile().put("TIPO", clifo()); 
 | 
						|
 | 
						|
    int err = ~NOERR;    
 | 
						|
    if (m.field(F_OCCASEDIT).active())        // Se e' un occasionale
 | 
						|
    {
 | 
						|
      TRelation occas(LF_OCCAS);
 | 
						|
      const TMask& om = occas_mask();
 | 
						|
      om.autosave(&occas);                    // Salva i dati anagrafici
 | 
						|
      
 | 
						|
      err = occas.write();
 | 
						|
      if (err == _isreinsert)
 | 
						|
        err = occas.rewrite();
 | 
						|
      
 | 
						|
      if (err == NOERR)
 | 
						|
        _rel->lfile().put("OCFPI", occas_mask().get(O_CODICE));
 | 
						|
      else
 | 
						|
        error_box("Errore di scrittura sul file dei clienti/fornitori occasionali: %d", err);  
 | 
						|
    }
 | 
						|
    if (err) _rel->lfile().zero("OCFPI");
 | 
						|
  }
 | 
						|
  
 | 
						|
  const bool intra = causale().intra();
 | 
						|
  const bool to_swap = test_swap(FALSE);                                   
 | 
						|
  if (to_swap)
 | 
						|
  {
 | 
						|
    real totale = _rel->lfile().get("TOTDOC");
 | 
						|
    totale = -totale;
 | 
						|
    _rel->lfile().put("TOTDOC", totale);
 | 
						|
  }
 | 
						|
  
 | 
						|
  ivas_pack();
 | 
						|
  TArray& irows = ivas().rows_array();
 | 
						|
  for (int i = 0; i < irows.items(); i++)
 | 
						|
  {
 | 
						|
    TToken_string& row = (TToken_string&)irows[i];
 | 
						|
 | 
						|
    TRectype &r = _rel->iva(i);
 | 
						|
    r.zero();
 | 
						|
    r.put("ANNOES", annoes);              // Anno d'esercizio della testata (che ca$$ata!)
 | 
						|
    r.put("NUMREG", numreg);
 | 
						|
    r.put("INTRA", intra);                // Causale intra (che ca$$ata!)
 | 
						|
    r.put("NUMRIG", i+1);
 | 
						|
    
 | 
						|
    real imponibile(row.get(0));
 | 
						|
    if (to_swap) imponibile = -imponibile;
 | 
						|
    r.put("IMPONIBILE", imponibile);
 | 
						|
    
 | 
						|
    r.put("CODIVA", row.get());
 | 
						|
    r.put("TIPODET", row.get());
 | 
						|
    
 | 
						|
    real imposta(row.get());
 | 
						|
    if (to_swap) imposta = -imposta;
 | 
						|
    r.put("IMPOSTA", imposta);
 | 
						|
    
 | 
						|
    r.put("TIPOCR", row.get());
 | 
						|
 | 
						|
    const TBill c(row, -1, 0x1);
 | 
						|
    const int rimp = bill2pos(c, 'I')+1;
 | 
						|
    r.put("RIGAIMP", rimp);
 | 
						|
    c.put(r);
 | 
						|
  } 
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::check_saldi()
 | 
						|
{
 | 
						|
  TString_array& rows = cgs().rows_array();
 | 
						|
  const int anno = _rel->lfile().get_int("ANNOES");
 | 
						|
  
 | 
						|
  for (int i = 0; i < rows.items(); i++)
 | 
						|
  {
 | 
						|
    TToken_string& row = (TToken_string&)rows[i];
 | 
						|
    TBill conto(row, 2, 0x3);
 | 
						|
    conto.find();
 | 
						|
    const char sez = conto.sezione();
 | 
						|
    if (sez > ' ')
 | 
						|
    {
 | 
						|
      const TConto* c = _saldi.find(conto, anno);
 | 
						|
      if (c && !c->saldo_finale().is_zero() && c->saldo_finale().sezione() != sez)
 | 
						|
        warning_box("Il conto della riga %i ha un saldo finale in %s, "
 | 
						|
                    "contrariamente a quanto indicato sul piano dei conti", 
 | 
						|
                    i+1, sez == 'A' ? "dare" : "avere");
 | 
						|
    }                
 | 
						|
  }
 | 
						|
}  
 | 
						|
 | 
						|
 | 
						|
int TPrimanota_application::write(const TMask& m)
 | 
						|
{                                 
 | 
						|
  const long numreg = m.get_long(F_NUMREG);
 | 
						|
  if (numreg > _lastreg) _lastreg = numreg;             // Aggiorna ultima registrazione
 | 
						|
 | 
						|
  mask2rel(m);
 | 
						|
  const int err = _rel->write(TRUE);
 | 
						|
  if (err == NOERR)
 | 
						|
  {
 | 
						|
    _saldi.registra();
 | 
						|
    check_saldi();
 | 
						|
    
 | 
						|
    if (iva() != nessuna_iva)
 | 
						|
    {
 | 
						|
      causale().reg().reread();                        // Aggiorna protocollo IVA
 | 
						|
      if (_is_saldaconto)
 | 
						|
        write_scadenze(m);
 | 
						|
      else 
 | 
						|
        if (!m.get_bool(F_SOLAIVA))
 | 
						|
        {
 | 
						|
          const TString16 causimm(causale().causale_inc_imm());
 | 
						|
          if (causimm.not_empty())
 | 
						|
            genera_incasso(causimm);
 | 
						|
        }    
 | 
						|
    }    
 | 
						|
  } 
 | 
						|
  return err;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int TPrimanota_application::rewrite(const TMask& m)
 | 
						|
{
 | 
						|
  mask2rel(m);
 | 
						|
  const int err = _rel->rewrite(TRUE);
 | 
						|
  if (err == NOERR)
 | 
						|
  {
 | 
						|
    _saldi.registra();
 | 
						|
    check_saldi();
 | 
						|
  }  
 | 
						|
  if (_is_saldaconto && iva() != nessuna_iva) 
 | 
						|
    write_scadenze(m);  
 | 
						|
  return err;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TPrimanota_application::remove()
 | 
						|
{
 | 
						|
  const bool ok = TRelation_application::remove();
 | 
						|
  if (ok)
 | 
						|
  {
 | 
						|
    _saldi.registra();  
 | 
						|
    check_saldi();
 | 
						|
  }  
 | 
						|
  // TBI eliminazione partita
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
HIDDEN bool incasso_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_ENTER)
 | 
						|
  {
 | 
						|
    TMask& m = f.mask();
 | 
						|
    TImporto tot(m.get(I_SEZIONE1)[0], (real)m.get(F_TOTALE));
 | 
						|
    
 | 
						|
    for (int i = 2; i < 5; i++)
 | 
						|
    {
 | 
						|
      const int sid = i == 2 ? I_SEZIONE2 : (i == 3 ? I_SEZIONE3 : I_SEZIONE4);
 | 
						|
      const real val(m.get(sid+1));
 | 
						|
      const TImporto imp(m.get(sid)[0], val);
 | 
						|
      tot += imp;
 | 
						|
    }
 | 
						|
    if (!tot.is_zero())
 | 
						|
      return f.error_box("Il movimento e' sbilaciato di %s", tot.valore().string("."));
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TPrimanota_application::genera_incasso(const char* causimm)
 | 
						|
{
 | 
						|
  TMask m("cg2100i");
 | 
						|
  if (iva() == iva_acquisti) m.set_caption("Movimento di pagamento immediato");
 | 
						|
  
 | 
						|
  m.set_handler(F_DATAREG,  datareg_handler);
 | 
						|
  m.set_handler(F_DATACOMP, datacomp_handler);
 | 
						|
  m.set_handler(F_TOTALE,   incasso_handler);
 | 
						|
  
 | 
						|
  TCausale caus(causimm);             // Causale da usare
 | 
						|
  
 | 
						|
  if (caus.data_doc()) m.efield(F_DATADOC).check_type(CHECK_REQUIRED);
 | 
						|
  if (caus.num_doc()) m.efield(F_NUMDOC).check_type(CHECK_REQUIRED);
 | 
						|
 | 
						|
  m.set(F_DATAREG, curr_mask().get(F_DATAREG));
 | 
						|
  m.set(F_DATACOMP, curr_mask().get(F_DATACOMP));
 | 
						|
  m.set(F_DATADOC, curr_mask().get(F_DATADOC));
 | 
						|
  m.set(F_NUMDOC, curr_mask().get(F_NUMDOC));
 | 
						|
  m.set(F_NUMREG, _lastreg+1);                  // Incrementa numero di registrazione
 | 
						|
  m.set(F_DESCR, caus.desc_agg(1));             // Descrizione
 | 
						|
  m.set(F_CODCAUS, causimm);                    // Cambia causale
 | 
						|
  m.set(F_DESCRCAUS, caus.descrizione()); 
 | 
						|
  
 | 
						|
  m.set(I_SEZIONE1, caus.sezione_clifo() == 'D' ? "D" : "A");
 | 
						|
  m.set(F_TOTALE, curr_mask().get(F_TOTALE));                       
 | 
						|
  
 | 
						|
  m.set(F_CLIFO, _rel->cg(0).get("TIPOC"));
 | 
						|
  m.set(F_GRUPPOCLIFO, _rel->cg(0).get("GRUPPO"));
 | 
						|
  m.set(F_CONTOCLIFO, _rel->cg(0).get("CONTO"));
 | 
						|
  const TString& clifo = _rel->cg(0).get("SOTTOCONTO");
 | 
						|
  m.set(F_CLIENTE, clifo); m.set(F_FORNITORE, clifo); m.set(I_SOTTOCONTO, clifo);
 | 
						|
  
 | 
						|
  TBill conto; caus.bill(2, conto);   // Conto della seconda riga della causale
 | 
						|
  m.set(I_SEZIONE2, caus.sezione_clifo() == 'D' ? "A" : "D");
 | 
						|
  m.set(I_IMPORTO2, curr_mask().get(F_TOTALE));                       
 | 
						|
  m.set(I_GRUPPO2, conto.gruppo());
 | 
						|
  m.set(I_CONTO2, conto.conto());
 | 
						|
  m.set(I_SOTTOCONTO2, conto.sottoconto());
 | 
						|
  
 | 
						|
  if (m.run() == K_SAVE)
 | 
						|
  {
 | 
						|
    TMovimentoPN inc;                  // Nuovo movimento di incasso immediato
 | 
						|
    
 | 
						|
    m.autosave(&inc);
 | 
						|
    inc.lfile().put("TIPODOC", caus.tipo_doc());      // Tipo documento
 | 
						|
    inc.lfile().put("REG", caus.reg().name());        // Registro
 | 
						|
    
 | 
						|
    const int annoes = m.get_int(F_ANNOES);
 | 
						|
    const TString16 datareg = m.get(F_DATAREG);
 | 
						|
    long num = m.get_long(F_NUMREG);                           
 | 
						|
    
 | 
						|
    TRectype& r = inc.cg(0);       
 | 
						|
    r.zero();
 | 
						|
    r.put("NUMREG", num);
 | 
						|
    r.put("NUMRIG", 1);
 | 
						|
    r.put("DATAREG", datareg);
 | 
						|
    r.put("ANNOES", annoes);
 | 
						|
    r.put("SEZIONE", m.get(I_SEZIONE1));
 | 
						|
    r.put("IMPORTO", m.get(F_TOTALE));
 | 
						|
    r.put("TIPOC", m.get(F_CLIFO));
 | 
						|
    r.put("GRUPPO", m.get(F_GRUPPOCLIFO));
 | 
						|
    r.put("CONTO", m.get(F_CONTOCLIFO));
 | 
						|
    
 | 
						|
    short clifo_id;
 | 
						|
    switch (m.get(F_CLIFO)[0])
 | 
						|
    {
 | 
						|
    case 'C': 
 | 
						|
      clifo_id = F_CLIENTE; break;
 | 
						|
    case 'F': 
 | 
						|
      clifo_id = F_FORNITORE; break;
 | 
						|
      default : 
 | 
						|
      clifo_id = I_SOTTOCONTO; break;
 | 
						|
    }  
 | 
						|
    r.put("SOTTOCONTO", m.get(clifo_id));
 | 
						|
    r.put("DESCR", m.get(F_DESCR));
 | 
						|
    r.put("TIPOCC", " ");
 | 
						|
    r.put("GRUPPOC", m.get(I_GRUPPO2));
 | 
						|
    r.put("CONTOC", m.get(I_CONTO2));
 | 
						|
    r.put("SOTTOCONTC", m.get(I_SOTTOCONTO2));
 | 
						|
 | 
						|
    r.put("ROWTYPE", " ");
 | 
						|
    
 | 
						|
    for (int i = 2; i < 5; i++)
 | 
						|
    { 
 | 
						|
      const int sid = i == 2 ? I_SEZIONE2 : (i == 3 ? I_SEZIONE3 : I_SEZIONE4);
 | 
						|
      const char* imp = m.get(sid+1);
 | 
						|
      if (*imp == '\0') break;
 | 
						|
 | 
						|
      TRectype& r = inc.cg(i-1);
 | 
						|
      r.zero();
 | 
						|
      r.put("IMPORTO", imp);
 | 
						|
      r.put("NUMREG", num);
 | 
						|
      r.put("NUMRIG", i);
 | 
						|
      r.put("DATAREG", datareg);
 | 
						|
      r.put("ANNOES", annoes);
 | 
						|
      r.put("SEZIONE", m.get(sid));
 | 
						|
      r.put("TIPOC", ' ');
 | 
						|
      r.put("GRUPPO", m.get(sid+2));
 | 
						|
      r.put("CONTO", m.get(sid+3));
 | 
						|
      r.put("SOTTOCONTO", m.get(sid+4));
 | 
						|
      if (i == 2) 
 | 
						|
        r.put("DESCR", caus.desc_agg(2));
 | 
						|
      
 | 
						|
      r.put("TIPOCC", m.get(F_CLIFO));
 | 
						|
      r.put("GRUPPOC", m.get(F_GRUPPOCLIFO));
 | 
						|
      r.put("CONTOC", m.get(F_CONTOCLIFO));
 | 
						|
      r.put("SOTTOCONTC", m.get(clifo_id));
 | 
						|
      
 | 
						|
      r.put("ROWTYPE", " ");
 | 
						|
    }
 | 
						|
    
 | 
						|
    while (inc.write() == _isreinsert)           // In caso di riscrittura
 | 
						|
    {                                  
 | 
						|
      num++;                                     // Incrementa numero registrazione
 | 
						|
      inc.lfile().put("NUMREG", num);            
 | 
						|
    }  
 | 
						|
    
 | 
						|
    if (inc.good())
 | 
						|
    {                                         
 | 
						|
      if (num > _lastreg) _lastreg = num;
 | 
						|
      
 | 
						|
      _saldi.reset();                              // Inizializza saldi
 | 
						|
      _saldi.set_movprovv(FALSE);
 | 
						|
      _saldi.set_movap(FALSE);
 | 
						|
      _saldi.set_anno_es(m.get_int(F_ANNOES));
 | 
						|
      _saldi.set_num_ulmov(_lastreg);
 | 
						|
      _saldi.set_data_ulmov((TDate)m.get(F_DATAREG));
 | 
						|
      for (int r = 0; r < i; r++)
 | 
						|
      {                
 | 
						|
        const TRectype& rec = inc.cg(r);
 | 
						|
        TBill c; c.get(rec);
 | 
						|
        const real im(rec.get("IMPORTO"));
 | 
						|
        const char sezione = rec.get_char("SEZIONE");
 | 
						|
        _saldi.aggiorna(c, im, sezione, TRUE);    
 | 
						|
      } 
 | 
						|
      _saldi.registra();
 | 
						|
      check_saldi();
 | 
						|
    }  
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int cg2100 (int argc, char** argv)
 | 
						|
{
 | 
						|
  TPrimanota_application a;
 | 
						|
  a.run(argc, argv, "Prima nota");
 | 
						|
  return 0;
 | 
						|
}
 |