409 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			409 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// 771232.cpp - Quadri G
 | 
						|
#include <relapp.h>
 | 
						|
#include <config.h>
 | 
						|
#include <msksheet.h>
 | 
						|
#include <sort.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <execp.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <defmask.h>
 | 
						|
 | 
						|
#include "quadrog.h"
 | 
						|
#include "quadrogp.h"
 | 
						|
#include "77lib.h"
 | 
						|
#include "774200.h"
 | 
						|
#include "771234a.h"   // G
 | 
						|
#include "771232.h"
 | 
						|
 | 
						|
 | 
						|
// Aliquote prospetti 2  (I e II)
 | 
						|
HIDDEN const char* aliq[8] =
 | 
						|
{
 | 
						|
  "10",
 | 
						|
  "10",
 | 
						|
  "12.50",
 | 
						|
  "12.50",
 | 
						|
  "15",
 | 
						|
  "15",
 | 
						|
  "34.40",
 | 
						|
  "34.40"
 | 
						|
};
 | 
						|
 | 
						|
HIDDEN const int  RIGHE_P1_I  = 3;
 | 
						|
HIDDEN const int  RIGHE_P1_II = 3;
 | 
						|
HIDDEN const int  RIGHE_P2_I  = 20;
 | 
						|
HIDDEN const int  RIGHE_P2_II = 20;
 | 
						|
HIDDEN const char*  DISTINTA_APP = "771mod -6 4";
 | 
						|
 | 
						|
#define AMM_AZ    102
 | 
						|
#define NUM_AZ    103
 | 
						|
#define AMM_COMP  104
 | 
						|
 | 
						|
HIDDEN  real __amm_az = ZERO;
 | 
						|
HIDDEN  real __num_az = ZERO;  
 | 
						|
 | 
						|
TQuadroG::TQuadroG(const char quadro)
 | 
						|
{
 | 
						|
  _registra   = _bUsatoDistinta = FALSE;
 | 
						|
  switch (quadro)
 | 
						|
  {
 | 
						|
    case '3':
 | 
						|
      _quadro = "G";  
 | 
						|
      _title  = "Quadro G";
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
inline TQuadroG& app() { return (TQuadroG&) main_app(); }
 | 
						|
 | 
						|
int TQuadroG::read(TMask& m)
 | 
						|
{
 | 
						|
  int err = TRelation_application::read(m);
 | 
						|
 | 
						|
  if (err == NOERR)
 | 
						|
  {
 | 
						|
    fill_ss(m);
 | 
						|
    err = read_prospetto_2(m);
 | 
						|
  }
 | 
						|
  return err;
 | 
						|
}
 | 
						|
 | 
						|
int TQuadroG::write(const TMask& m)
 | 
						|
{
 | 
						|
  //ss2rel(m);  
 | 
						|
  int err = TRelation_application::write(m);
 | 
						|
  _registra = err == NOERR;    
 | 
						|
  if (_registra)
 | 
						|
    err = write_prospetto_2(m);
 | 
						|
  return err;
 | 
						|
}
 | 
						|
 | 
						|
int TQuadroG::rewrite(const TMask& m)
 | 
						|
{
 | 
						|
  //ss2rel(m);
 | 
						|
  int err = TRelation_application::rewrite(m);
 | 
						|
  _registra = err == NOERR;    
 | 
						|
  if (_registra)
 | 
						|
    err = write_prospetto_2(m,TRUE);
 | 
						|
  return err;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::remove()
 | 
						|
{  
 | 
						|
  remove_prospetto_2();
 | 
						|
  _registra = TRelation_application::remove();
 | 
						|
  return _registra;
 | 
						|
}
 | 
						|
 | 
						|
int TQuadroG::read_prospetto_2(const TMask& m)
 | 
						|
{
 | 
						|
  return NOERR;
 | 
						|
}
 | 
						|
 | 
						|
int TQuadroG::write_prospetto_2(const TMask& m, bool force)
 | 
						|
{
 | 
						|
  return NOERR;
 | 
						|
}
 | 
						|
 | 
						|
int TQuadroG::remove_prospetto_2()
 | 
						|
{
 | 
						|
  return NOERR;
 | 
						|
}
 | 
						|
 | 
						|
void TQuadroG::init_query_mode (TMask& m)
 | 
						|
{
 | 
						|
  TString16 codditta;
 | 
						|
  codditta << _codditta;
 | 
						|
  TMask_field& f = m.field(F_CODDITTA);
 | 
						|
  f.set(codditta);
 | 
						|
  f.check();
 | 
						|
  m.send_key(K_AUTO_ENTER,0);
 | 
						|
}
 | 
						|
 | 
						|
void TQuadroG::update_totals(TSheet_field& f, int ss)
 | 
						|
{
 | 
						|
  int i = 0;
 | 
						|
  TMask& m = f.mask();
 | 
						|
  switch (ss)
 | 
						|
  {
 | 
						|
    case 1:
 | 
						|
    {
 | 
						|
      real tot_numq, tot_amm;
 | 
						|
      tot_numq = tot_amm = ZERO;
 | 
						|
      const int items = f.items();
 | 
						|
      // Calcolo il totale
 | 
						|
      for (i = 0;  i < items; i++)
 | 
						|
      {
 | 
						|
        TToken_string& r = f.row(i);
 | 
						|
        real numq(r.get(2));
 | 
						|
        real amm (r.get(3));     
 | 
						|
        tot_numq += numq;
 | 
						|
        tot_amm  += amm;
 | 
						|
      } 
 | 
						|
      // totali...
 | 
						|
      m.set(F_P1_I_TOT1,tot_numq);
 | 
						|
      m.set(F_P1_I_TOT2,tot_amm);
 | 
						|
    }       
 | 
						|
    break;
 | 
						|
  case 2:
 | 
						|
    {
 | 
						|
      real tot_valult;
 | 
						|
      const int items = f.items();
 | 
						|
      // Calcolo il totale
 | 
						|
      for (i = 0;  i < items; i++)
 | 
						|
      {
 | 
						|
        TToken_string& r = f.row(i);
 | 
						|
        real val(r.get(1));
 | 
						|
        tot_valult  += val;
 | 
						|
      }
 | 
						|
      // totali...
 | 
						|
      m.set(F_P1_II_TOT,tot_valult);
 | 
						|
    }       
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// Quadro G prospetto 1 - I
 | 
						|
// Calcola amm_complessivo = num_quote * amm_azione
 | 
						|
bool TQuadroG::calc_amm(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_TAB)
 | 
						|
  {                    
 | 
						|
    TMask& m = f.mask();
 | 
						|
    real amm_az(m.get(AMM_AZ));
 | 
						|
    real rNumAz = m.get_real(NUM_AZ);
 | 
						|
    bool ricalcola = FALSE;
 | 
						|
    real amm_comp(m.get(AMM_COMP));
 | 
						|
    ricalcola = ( (__amm_az != amm_az) || (__num_az != rNumAz) );
 | 
						|
    if (!ricalcola && amm_comp != ZERO)
 | 
						|
      return TRUE;   
 | 
						|
      
 | 
						|
    // Calcola e setta il valore
 | 
						|
    real amm = ZERO;
 | 
						|
    amm = amm_az * rNumAz;
 | 
						|
    amm.trunc();
 | 
						|
    m.set(AMM_COMP, amm.string());   
 | 
						|
    // Setta i flag usati per il confronto successivo
 | 
						|
    __amm_az = amm_az;
 | 
						|
    __num_az = rNumAz;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::exec_distinta(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_SPACE)
 | 
						|
  {
 | 
						|
    TExternal_app zzz(DISTINTA_APP);
 | 
						|
    zzz.run();
 | 
						|
    // Fai il ricalcolo    
 | 
						|
    app()._bUsatoDistinta = TRUE;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::user_create() 
 | 
						|
{
 | 
						|
  _msk = new TMask("771234a");
 | 
						|
  _rel = new TRelation(LF_QUAG);
 | 
						|
  _rel->add(LF_QUAGP,"CODDITTA=CODDITTA");
 | 
						|
  _codditta = get_firm_770();  
 | 
						|
  _msk->disable(DLG_CANCEL);   // disabilito Annulla nella toolbar
 | 
						|
  _msk->disable(DLG_NEWREC);   // disabilito Nuovo   nella toolbar
 | 
						|
  _msk->disable(DLG_DELREC);   // disabilito Elimina nella toolbar
 | 
						|
  _msk->disable(DLG_FINDREC);  // disabilito Ricerca nella toolbar
 | 
						|
  _msk->set_handler(DLG_DISTINTA, exec_distinta);  
 | 
						|
  _msk->set_handler(mainmsk_handler);
 | 
						|
  TSheet_field& p1 = (TSheet_field&) _msk->field(F_P1_I);  
 | 
						|
  p1.set_append(FALSE);
 | 
						|
  p1.set_notify(p1_notify);                          
 | 
						|
  p1.sheet_mask().set_handler(NUM_AZ, calc_amm);
 | 
						|
  p1.sheet_mask().set_handler(AMM_AZ, calc_amm);  
 | 
						|
  TSheet_field& p2 = (TSheet_field&) _msk->field(F_P1_II);  
 | 
						|
  p2.set_notify(p2_notify);                              
 | 
						|
  p2.set_append(FALSE);
 | 
						|
  //TSheet_field& pIII = (TSheet_field&) _msk->field(F_PIII);
 | 
						|
  //pIII.set_notify(pIII_notify);          
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::user_destroy() 
 | 
						|
{
 | 
						|
  delete _rel; delete _msk;  
 | 
						|
  if (_registra || _bUsatoDistinta)
 | 
						|
    _rip.set(_quadro);  
 | 
						|
  return TRUE;
 | 
						|
}                           
 | 
						|
 | 
						|
void TQuadroG::ss2rel(const TMask& m)
 | 
						|
{
 | 
						|
  TSheet_field& p1_I = (TSheet_field&)m.field(F_P1_I);
 | 
						|
  TRectype& rec = _rel->curr();
 | 
						|
  TString datad, ammq, numq, amm;
 | 
						|
  
 | 
						|
  // Prospetto 1 - I  Utili in denaro
 | 
						|
  for (int i = 0;  i < RIGHE_P1_I; i++)
 | 
						|
  {
 | 
						|
    TToken_string& r = p1_I.row(i);
 | 
						|
    datad = r.get(0);
 | 
						|
    ammq  = r.get();
 | 
						|
    numq  = r.get();
 | 
						|
    amm   = r.get();
 | 
						|
 | 
						|
    // Costruisco i nomi dei campi (sono numerati)
 | 
						|
    TString16 n_datad ("P1DATAD");
 | 
						|
    n_datad << i+1;
 | 
						|
    TString16 n_ammq  ("P1AMMQ");
 | 
						|
    n_ammq << i+1;
 | 
						|
    TString16 n_numq  ("P1NUMQ");
 | 
						|
    n_numq << i+1;
 | 
						|
    TString16 n_amm   ("P1AMM");
 | 
						|
    n_amm << i+1;
 | 
						|
 | 
						|
    // Scrivo i suddetti campi nella relazione
 | 
						|
    rec.put(n_datad, datad);
 | 
						|
    rec.put(n_ammq, ammq);
 | 
						|
    rec.put(n_numq, numq);
 | 
						|
    rec.put(n_amm, amm);
 | 
						|
  }
 | 
						|
 | 
						|
  // Prospetto 1 - II Utili in natura
 | 
						|
  TSheet_field& p1_II = (TSheet_field&)m.field(F_P1_II);
 | 
						|
  
 | 
						|
  for (i = 0;  i < RIGHE_P1_II; i++)
 | 
						|
  {
 | 
						|
    TToken_string& r = p1_II.row(i);
 | 
						|
    TString descr (r.get(0));
 | 
						|
    TString val   (r.get());
 | 
						|
 | 
						|
    // Costruisco i nomi dei campi (sono numerati)
 | 
						|
    TString16 n_descr ("P2DESC");
 | 
						|
    n_descr << i+1;
 | 
						|
    TString16 n_val ("P2VAL");            
 | 
						|
    n_val << i+1;
 | 
						|
 | 
						|
    // Scrivo i suddetti campi nella relazione
 | 
						|
    rec.put(n_descr, descr);
 | 
						|
    rec.put(n_val,   val);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TQuadroG::fill_ss(TMask& m)
 | 
						|
{
 | 
						|
  TRectype k(LF_QUAGP);
 | 
						|
  TRecord_array ra(LF_QUAGP,"NPROG"); 
 | 
						|
  TSheet_field& p1_I = (TSheet_field&)m.field(F_P1_I);
 | 
						|
  TSheet_field& p1_II = (TSheet_field&)m.field(F_P1_II);
 | 
						|
 | 
						|
  // Prospetto 1 - I  Utili in denaro
 | 
						|
  k.put(QGP_CODDITTA,_codditta);
 | 
						|
  k.put(QGP_PROSPETTO,"1");
 | 
						|
  k.put(QGP_SEZIONE,"1");
 | 
						|
  ra.read(k);
 | 
						|
  if (ra.rows()>0)
 | 
						|
  {
 | 
						|
    const int items = ra.rows();
 | 
						|
    for (int i = 0; i < items; i++)
 | 
						|
    {
 | 
						|
      const TRectype& r = ra.row(i);
 | 
						|
      TToken_string& t = p1_I.row(i+1);
 | 
						|
      t.add(r.get(QGP_DATADEL));
 | 
						|
      t.add(r.get(QGP_UTIL1S));
 | 
						|
      t.add(r.get(QGP_NUMQUOTE));
 | 
						|
      t.add(r.get(QGP_UTIL2S));
 | 
						|
    }
 | 
						|
  }
 | 
						|
  //if (m.mode() == MODE_MOD)
 | 
						|
  //  update_totals(p1_I,1);
 | 
						|
 | 
						|
  // Prospetto 1 - II  Utili in natura
 | 
						|
  k.zero();
 | 
						|
  k.put(QGP_CODDITTA,_codditta);
 | 
						|
  k.put(QGP_PROSPETTO,"1");
 | 
						|
  k.put(QGP_SEZIONE,"2");
 | 
						|
  ra.read(k);
 | 
						|
  if (ra.rows()>0)
 | 
						|
  {
 | 
						|
    const int items = ra.rows();
 | 
						|
    for (int i = 0; i < items; i++)
 | 
						|
    {
 | 
						|
      const TRectype& r = ra.row(i);
 | 
						|
      TToken_string& t = p1_II.row(i+1);
 | 
						|
      t.add(r.get(QGP_DESCRBENI));
 | 
						|
      t.add(r.get(QGP_UTIL1S));
 | 
						|
    }
 | 
						|
  }
 | 
						|
  //if (m.mode() == MODE_MOD)
 | 
						|
  //  update_totals(p1_II,2);
 | 
						|
 | 
						|
 | 
						|
  // Prospetto 2 - I  Utili in denaro
 | 
						|
  k.zero();
 | 
						|
  k.put(QGP_CODDITTA,_codditta);
 | 
						|
  k.put(QGP_PROSPETTO,"2");
 | 
						|
  k.put(QGP_SEZIONE,"1");
 | 
						|
  ra.read(k);
 | 
						|
  if (ra.rows()>0)
 | 
						|
  {
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  // Prospetto 2 - II  Utili in natura
 | 
						|
  k.zero();
 | 
						|
  k.put(QGP_CODDITTA,_codditta);
 | 
						|
  k.put(QGP_PROSPETTO,"2");
 | 
						|
  k.put(QGP_SEZIONE,"2");
 | 
						|
  ra.read(k);
 | 
						|
  if (ra.rows()>0)
 | 
						|
  {
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::p1_notify(TSheet_field& s, int r, KEY k)
 | 
						|
{
 | 
						|
  switch(k)
 | 
						|
  {                               
 | 
						|
    case K_ENTER:
 | 
						|
      __amm_az = ZERO;
 | 
						|
      __num_az = ZERO;
 | 
						|
      update_totals(s, 1);    
 | 
						|
      break;
 | 
						|
    case K_SPACE: 
 | 
						|
      {
 | 
						|
      TToken_string& row = s.row(r);
 | 
						|
      __num_az  = row.get(3);
 | 
						|
      __amm_az  = row.get(4);
 | 
						|
      }
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::p2_notify(TSheet_field& s, int r, KEY k)
 | 
						|
{
 | 
						|
  switch(k)
 | 
						|
  {                               
 | 
						|
    case K_ENTER:
 | 
						|
      update_totals(s, 2);    
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadroG::mainmsk_handler(TMask& m, KEY k)
 | 
						|
{ 
 | 
						|
  if (k == K_ESC)
 | 
						|
  {
 | 
						|
    TOperable_field& f = m.focus_field();
 | 
						|
    m.set_focus_field(f.dlg()); 
 | 
						|
  } 
 | 
						|
  return TRUE;
 | 
						|
} |