Files correlati : ve6.exe Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 979 git-svn-id: svn://10.65.10.50/trunk@15623 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			348 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			348 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// 771300.cpp  - Gestione quadro I e Prospetto dati generali
 | 
						|
//
 | 
						|
// 771mod -2 I		 - quadro I
 | 
						|
// 771mod -2 W		 - prospetto dati generali
 | 
						|
// 771mod -2 1		 - quadro I dichiarante
 | 
						|
// 771mod -2 2		 - prospetto dati generali dichiarante
 | 
						|
//
 | 
						|
// 18.3.96	Aggiunto metodo per registrare flag in QCOMP
 | 
						|
//          NB se cambia numero quadri, modificare set_rel_field_quadri
 | 
						|
//
 | 
						|
#include <relapp.h>
 | 
						|
#include <urldefid.h>
 | 
						|
 | 
						|
#include "771300.h" 
 | 
						|
#include "77lib.h" 
 | 
						|
#include "774200.h"
 | 
						|
 | 
						|
HIDDEN const int QUADRI = 29;
 | 
						|
// Corrispondenza tra posizione nel record (campo:QCOMP) e id della maschera
 | 
						|
HIDDEN int _dlg_comp_array[QUADRI] = {
 | 
						|
    F_QCOMPA,
 | 
						|
    F_QCOMPA1,
 | 
						|
    F_QCOMPA2,
 | 
						|
    F_QCOMPA3,
 | 
						|
    F_QCOMPB,
 | 
						|
    F_QCOMPB1,
 | 
						|
    F_QCOMPC, 
 | 
						|
    F_QCOMPD, 
 | 
						|
    F_QCOMPD1,
 | 
						|
    F_QCOMPE, 
 | 
						|
    F_QCOMPE1,
 | 
						|
    F_QCOMPE2,
 | 
						|
    F_QCOMPF, 
 | 
						|
    F_QCOMPF1,
 | 
						|
    F_QCOMPF2,
 | 
						|
    F_QCOMPG, 
 | 
						|
    F_QCOMPG1,
 | 
						|
    F_QCOMPH, 
 | 
						|
    F_QCOMPI, 
 | 
						|
    F_QCOMPL,
 | 
						|
    F_QCOMPN,
 | 
						|
    F_QCOMPP,
 | 
						|
    F_QCOMPQ,
 | 
						|
    F_QCOMPR,
 | 
						|
    F_QCOMPS,
 | 
						|
    F_QCOMPT, 
 | 
						|
    F_QCOMPAB,
 | 
						|
    F_QCOMPDB,
 | 
						|
    F_QCOMPU    
 | 
						|
  };
 | 
						|
 | 
						|
// Da id della maschera ritorna la corrispondente posizione in QCOMP
 | 
						|
// Ritorna -1 se viene passato un id che non esiste in _dlg_array
 | 
						|
HIDDEN int dlg2pos(const int dlg)
 | 
						|
{
 | 
						|
  for (int i=0; i < QUADRI; i++)
 | 
						|
    if (_dlg_comp_array[i] == dlg)
 | 
						|
      return i;
 | 
						|
  return -1;
 | 
						|
}
 | 
						|
    
 | 
						|
class TQuadroI : public TRelation_application
 | 
						|
{
 | 
						|
    TRelation	* _rel;
 | 
						|
    TMask     * _msk; 
 | 
						|
    char      _quadro;
 | 
						|
    bool      _registra;
 | 
						|
    TRiporti  _rip; 
 | 
						|
     
 | 
						|
  protected:
 | 
						|
    static	bool	PDGcalcolaM6(TMask_field& f, KEY k);
 | 
						|
    virtual bool 		user_create();
 | 
						|
    virtual bool 		user_destroy();
 | 
						|
    virtual TRelation*	get_relation() const { return _rel; }
 | 
						|
    virtual TMask*		get_mask(int mode);
 | 
						|
    virtual bool		changing_mask(int mode) {return FALSE; }
 | 
						|
    virtual int			read(TMask& m);
 | 
						|
    virtual void		init_query_mode(TMask&);
 | 
						|
    virtual void		init_modify_mode(TMask&);
 | 
						|
    virtual int 		write(const TMask& m);
 | 
						|
    virtual int 		rewrite(const TMask& m);
 | 
						|
  public:                                       
 | 
						|
    void set_field_quadri(TMask& m);        
 | 
						|
    void set_rel_field_quadri(const TMask& m);        
 | 
						|
    void setta_ditta(TMask& m);
 | 
						|
    TQuadroI(char q) : _quadro(q) {}
 | 
						|
};                     
 | 
						|
 | 
						|
HIDDEN TQuadroI& app() { return (TQuadroI&) main_app(); }
 | 
						|
 | 
						|
void TQuadroI::setta_ditta(TMask& m)
 | 
						|
{
 | 
						|
  TString16 codditta; codditta << get_firm_770();
 | 
						|
  if (codditta != "0")        
 | 
						|
  {
 | 
						|
    m.set(F_CODDITTA, codditta);
 | 
						|
    m.field(F_CODDITTA).check();
 | 
						|
  }
 | 
						|
}  
 | 
						|
               
 | 
						|
void TQuadroI::init_query_mode(TMask& m)
 | 
						|
{
 | 
						|
  setta_ditta(m);
 | 
						|
  m.send_key(K_AUTO_ENTER,0);
 | 
						|
}
 | 
						|
 | 
						|
void TQuadroI::init_modify_mode(TMask& m)
 | 
						|
{
 | 
						|
  setta_ditta(m);
 | 
						|
  _msk->disable(DLG_DELREC);
 | 
						|
 | 
						|
  if (_quadro == 'W' || _quadro == '2')
 | 
						|
  {
 | 
						|
    TConfig conf(CONFIG_STUDIO);
 | 
						|
    int anno = (int) conf.get_long(ANNO_SEL);
 | 
						|
    m.set(F_ANNODIC, anno);
 | 
						|
  }
 | 
						|
}
 | 
						|
        
 | 
						|
// Scrive i flag di q.comp. nella relazione
 | 
						|
void TQuadroI::set_rel_field_quadri(const TMask& m)
 | 
						|
{   
 | 
						|
  int   dlg, pos;
 | 
						|
 | 
						|
// NB Cambiare qui se cambia numero quadri
 | 
						|
  TString qcomp(QUADRI);
 | 
						|
  qcomp.spaces(QUADRI);
 | 
						|
    
 | 
						|
  for (dlg=F_QCOMPA; dlg<=F_QCOMPL; dlg++)    
 | 
						|
  {
 | 
						|
    pos = dlg2pos(dlg);
 | 
						|
    if (pos >= 0)    
 | 
						|
      qcomp[pos] = m.get(dlg) == "X" ? 'X' : ' ';
 | 
						|
  }           
 | 
						|
  _rel->curr().put("QCOMP", qcomp);
 | 
						|
 | 
						|
// Stessa cosa con flag quadri inviati
 | 
						|
  TString qsuppinv (QUADRI);  
 | 
						|
  qsuppinv.spaces(QUADRI);
 | 
						|
  
 | 
						|
  for (pos=0, dlg=F_QSUPPA; dlg<=F_QSUPPU; dlg++, pos++)    
 | 
						|
  {
 | 
						|
    qsuppinv[pos] = m.get(dlg) == "X" ? 'X' : ' ';
 | 
						|
  }
 | 
						|
  _rel->curr().put("QSUPPINV", qsuppinv);
 | 
						|
}
 | 
						|
 | 
						|
void TQuadroI::set_field_quadri(TMask& m)
 | 
						|
{   
 | 
						|
  int   start_dlg   = F_QCOMPA;
 | 
						|
  int   dlg;
 | 
						|
  TString qcomp (_rel->lfile().get("QCOMP"));
 | 
						|
  
 | 
						|
  if (qcomp != "")
 | 
						|
  {  
 | 
						|
    int lenght = qcomp.len();
 | 
						|
    for (int i = 0; i < lenght; i++)
 | 
						|
    { 
 | 
						|
        if (qcomp[i] == 'X')
 | 
						|
        {
 | 
						|
          dlg = _dlg_comp_array[i];
 | 
						|
          m.set(dlg, "X");
 | 
						|
        }
 | 
						|
    }
 | 
						|
  }  
 | 
						|
 | 
						|
  TString suppinv (_rel->lfile().get("QSUPPINV"));
 | 
						|
  
 | 
						|
  start_dlg = F_QSUPPA;
 | 
						|
  
 | 
						|
  if (suppinv != "")
 | 
						|
  {  
 | 
						|
    int lenght = suppinv.len();
 | 
						|
    for (int i = 0; i < lenght; i++)
 | 
						|
      if (suppinv[i] == 'X')
 | 
						|
      {
 | 
						|
        dlg = start_dlg + i;
 | 
						|
        m.set(dlg, "X");
 | 
						|
      }
 | 
						|
  }  
 | 
						|
}
 | 
						|
 | 
						|
TMask* TQuadroI::get_mask(int mode)
 | 
						|
{
 | 
						|
  return _msk;
 | 
						|
}
 | 
						|
                                              
 | 
						|
int TQuadroI::read(TMask& m)
 | 
						|
{
 | 
						|
  m.autoload(*_rel);
 | 
						|
// Si posiziona sul record del dichiarante, e se non esiste lo crea
 | 
						|
  if (_quadro == '1' || _quadro == '2') 
 | 
						|
  {
 | 
						|
    TString16 dep; dep << COD_QUA_I_DIC;
 | 
						|
    m.set(F_TIPOQUA1, dep); 
 | 
						|
    if (_quadro == '1')
 | 
						|
      m.set(F_TIPOQUA2, dep);   
 | 
						|
    _rel->curr().put("TIPOQUA", COD_QUA_I_DIC);
 | 
						|
    const int err = _rel->read();
 | 
						|
    if (err != NOERR)
 | 
						|
      enter_dichiar_770(get_firm_770(), anno_770(), TRUE);
 | 
						|
 | 
						|
    m.autoload(*_rel);
 | 
						|
  }
 | 
						|
 | 
						|
// Setta i flag di quadro compilato nel prospetto dai generali  
 | 
						|
  if (_quadro == 'W' || _quadro == '2')
 | 
						|
    set_field_quadri(m);
 | 
						|
  
 | 
						|
  return NOERR;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroI::PDGcalcolaM6(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_TAB)
 | 
						|
  {
 | 
						|
    TMask& m = f.mask();
 | 
						|
    real m3 = m.get_real(F_M3);
 | 
						|
    real m4 = m.get_real(F_M4);
 | 
						|
    real m5 = m.get_real(F_M5);    
 | 
						|
    real m6 = m3 - m4 - m5;
 | 
						|
    if (m6 < ZERO)
 | 
						|
      m6 = ZERO;
 | 
						|
    TString m6s(m6.string());
 | 
						|
    m.set(F_M6, m6s);
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroI::user_create()
 | 
						|
{ 
 | 
						|
  _registra = FALSE;
 | 
						|
  
 | 
						|
  switch (_quadro)
 | 
						|
  {
 | 
						|
    case '1':
 | 
						|
      _rel = new TRelation (LF_BASE);
 | 
						|
      _rel->add(LF_BASEBIS,"TIPOQUA=\"D\"&&CODDITTA=CODDITTA",1);
 | 
						|
      _msk = new TMask("771300a");  
 | 
						|
      _msk->disable(DLG_NEWREC);
 | 
						|
      _msk->disable(DLG_DELREC);
 | 
						|
      _msk->disable(DLG_FINDREC);
 | 
						|
      break;    
 | 
						|
    case 'I':    
 | 
						|
      _rel = new TRelation (LF_BASE);
 | 
						|
      _rel->add(LF_BASEBIS,"CODDITTA=CODDITTA",1);
 | 
						|
      _msk = new TMask("771300a");   
 | 
						|
      _msk->disable(DLG_NEWREC);
 | 
						|
      _msk->disable(DLG_DELREC);
 | 
						|
      _msk->disable(DLG_FINDREC);
 | 
						|
      break;    
 | 
						|
    case 'W':                               
 | 
						|
      _rel = new TRelation (LF_BASEBIS);          
 | 
						|
      _rel->add(LF_BASE,"CODDITTA=CODDITTA",1);
 | 
						|
      _msk = new TMask("771400a"); 
 | 
						|
      _msk->disable(DLG_NEWREC);
 | 
						|
      _msk->disable(DLG_DELREC);
 | 
						|
      _msk->disable(DLG_FINDREC);   
 | 
						|
      _msk->set_handler(F_M3, PDGcalcolaM6);
 | 
						|
      _msk->set_handler(F_M4, PDGcalcolaM6);
 | 
						|
      _msk->set_handler(F_M5, PDGcalcolaM6);
 | 
						|
      // set numero quadri L aggiuntivi
 | 
						|
      _msk->set(F_QLAGG,num_quadri_L_agg(get_firm_770()));
 | 
						|
      // set numero quadri N,P,Q,R,S,T aggiuntivi
 | 
						|
      _msk->set(F_QNAGG,num_quadri_N_agg(get_firm_770()));
 | 
						|
      break;
 | 
						|
    case '2':                     
 | 
						|
      _rel = new TRelation (LF_BASEBIS);                         
 | 
						|
      _rel->add(LF_BASE,"TIPOQUA=\"D\"&&CODDITTA=CODDITTA",1);
 | 
						|
      _msk = new TMask("771400b");
 | 
						|
      _msk->disable(DLG_NEWREC);
 | 
						|
      _msk->disable(DLG_DELREC);
 | 
						|
      _msk->disable(DLG_FINDREC);   
 | 
						|
      // set numero quadri L aggiuntivi
 | 
						|
      _msk->set(F_QLAGG,num_quadri_L_agg(get_firm_770()));
 | 
						|
      // set numero quadri N,P,Q,R,S,T aggiuntivi
 | 
						|
      _msk->set(F_QNAGG,num_quadri_N_agg(get_firm_770()));
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroI::user_destroy()
 | 
						|
{                 
 | 
						|
	if (_quadro  == 'I' && _registra)
 | 
						|
		_rip.set("I");
 | 
						|
		
 | 
						|
  delete _msk;
 | 
						|
  delete _rel;            
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int TQuadroI::write(const TMask& m)
 | 
						|
{
 | 
						|
  _registra = TRUE;
 | 
						|
  TRelation *r = get_relation();
 | 
						|
  m.autosave(*r);
 | 
						|
// Setta i flag di quadro compilato nel prospetto dai generali nella relazione
 | 
						|
  if (_quadro == 'W' || _quadro == '2')
 | 
						|
    set_rel_field_quadri(m);
 | 
						|
  r->write();    
 | 
						|
  return r->status();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int TQuadroI::rewrite(const TMask& m)
 | 
						|
{
 | 
						|
  _registra = TRUE;
 | 
						|
  TRelation *r = get_relation();
 | 
						|
  m.autosave(*r);
 | 
						|
// Setta i flag di quadro compilato nel prospetto dai generali  nella relazione
 | 
						|
  if (_quadro == 'W' || _quadro == '2')
 | 
						|
    set_rel_field_quadri(m);
 | 
						|
  r->rewrite();
 | 
						|
  return r->status();
 | 
						|
}
 | 
						|
 | 
						|
int m71300(int argc, char* argv[])
 | 
						|
{
 | 
						|
  if (argc < 3) 
 | 
						|
    return -1;
 | 
						|
 | 
						|
  char* title = NULL;
 | 
						|
  char quadro = toupper(*argv[2]);
 | 
						|
  TQuadroI a (quadro);  
 | 
						|
  
 | 
						|
  switch (quadro)
 | 
						|
  {
 | 
						|
    case 'I':    
 | 
						|
    case '1':    
 | 
						|
      title = "Quadro I";
 | 
						|
      break;
 | 
						|
    case 'W':
 | 
						|
    case '2':
 | 
						|
      title = "Prospetto dati generali";
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
 | 
						|
  a.run(argc, argv, title);
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
 |