Files correlati : Ricompilazione Demo : [ ] Commento :i tipi vanno dichiarati git-svn-id: svn://10.65.10.50/trunk@15722 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			274 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <defmask.h>
 | 
						|
#include <isam.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <recset.h>
 | 
						|
#include <validate.h>
 | 
						|
 | 
						|
#include "cg1300l.h"
 | 
						|
#include <clifo.h>
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TCheck_PIVA_mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TCheck_PIVA_mask : public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
 | 
						|
  void load_sheet();
 | 
						|
  bool save_sheet();
 | 
						|
  void update_sheet();
 | 
						|
  void dirty_sheet_row();
 | 
						|
 | 
						|
public:
 | 
						|
  TCheck_PIVA_mask() : TAutomask("cg1300l") { }
 | 
						|
};
 | 
						|
 | 
						|
// Carica lo sheet in base alle impostazioni correnti (F_CLIFO, F_COFI)
 | 
						|
void TCheck_PIVA_mask::load_sheet()
 | 
						|
{
 | 
						|
  const bool check_cofi = get_bool(F_COFI);
 | 
						|
 | 
						|
  TSheet_field& s = sfield(F_CLIFO);
 | 
						|
  s.destroy();
 | 
						|
 | 
						|
  // Elenco di tutti i clienti (o fornitori)
 | 
						|
  TISAM_recordset clifo("USE CLIFO\nFROM TIPOCF=#TIPO\nTO TIPOCF=#TIPO");
 | 
						|
  clifo.set_var("#TIPO", TVariant(get(F_TIPO)));
 | 
						|
 | 
						|
  TProgind pi(clifo.items(), TR("Scansione anagrafica"));
 | 
						|
  for (bool ok = clifo.move_first(); ok; ok = clifo.move_next())
 | 
						|
  {
 | 
						|
    const TString& stato = clifo.get(CLI_STATOPAIV).as_string();
 | 
						|
    if (stato.full() && stato != "IT")
 | 
						|
      continue;  // Ignoro gli esteri
 | 
						|
 | 
						|
    const TString& occas = clifo.get(CLI_OCCAS).as_string();
 | 
						|
    if (occas.full())
 | 
						|
      continue;  // Ignoro gli occasionali
 | 
						|
 | 
						|
    const TString16 paiv = clifo.get(CLI_PAIV).as_string();
 | 
						|
    if (paiv.full() && !real::is_natural(paiv))
 | 
						|
      continue;  // Ignoro esteri
 | 
						|
 | 
						|
    const TString16 cofi = clifo.get(CLI_COFI).as_string();
 | 
						|
 | 
						|
    const bool paiv_good = paiv.full() && pi_check("", paiv);  
 | 
						|
    const bool cofi_good = cofi.full() && cf_check("", cofi);
 | 
						|
    if (paiv_good && cofi_good)
 | 
						|
      continue;  // Ignoro chi sicuramente e' a posto
 | 
						|
 | 
						|
    const char tipoana = clifo.get(CLI_TIPOAPER).as_string()[0];
 | 
						|
    if (tipoana == 'F' && cofi_good)
 | 
						|
      continue; // Ignoro le persone fisiche col codice fiscale a posto
 | 
						|
 | 
						|
    if (paiv_good && !cofi_good && !check_cofi)
 | 
						|
      continue;  // Ignoro CF se non voluto
 | 
						|
 | 
						|
    // Riga sheet: Selezione|Codice|RagioneSociale|P.IVA|C.Fiscale|Messaggio
 | 
						|
    TToken_string& tok = s.row(-1);
 | 
						|
    tok.add(clifo.get(CLI_CODCF).as_int(), 1);
 | 
						|
    tok.add(clifo.get(CLI_RAGSOC).as_string());
 | 
						|
    tok.add(paiv);
 | 
						|
    tok.add(cofi);
 | 
						|
 | 
						|
    TToken_string msg(50, '\n');
 | 
						|
    if (!paiv_good) msg.add(TR("P.I. errata o mancante"));
 | 
						|
    if (!cofi_good) msg.add(TR("C.F. errato o mancante"));
 | 
						|
    msg.trim();
 | 
						|
    tok.add(msg);  
 | 
						|
  }
 | 
						|
 | 
						|
  s.force_update();
 | 
						|
}
 | 
						|
 | 
						|
// Salva le righe spuntate dello sheet
 | 
						|
bool TCheck_PIVA_mask::save_sheet()
 | 
						|
{
 | 
						|
  // Tengo pronto il file per fare gli aggiornamenti
 | 
						|
  TLocalisamfile clifo(LF_CLIFO);
 | 
						|
 | 
						|
  bool first = true; // Sto per incontrare il primo cliente?
 | 
						|
 | 
						|
  TSheet_field& s = sfield(F_CLIFO);
 | 
						|
 | 
						|
  // Mi tengo da parte le posizioni dei campi utili
 | 
						|
  const int pos_codcf = s.cid2index(S_CODCF);
 | 
						|
  const int pos_paiv = s.cid2index(S_PAIV);
 | 
						|
  const int pos_cofi = s.cid2index(S_COFI);
 | 
						|
  
 | 
						|
  // Scandisco solo le righe "spuntate"
 | 
						|
  FOR_EACH_SHEET_ROW(s, r, row) if ((*row)[0] == 'X') 
 | 
						|
  {
 | 
						|
    // Quando incontro il primo cliente selezionato, chiedo conferma
 | 
						|
    if (first)
 | 
						|
    {
 | 
						|
      const KEY k = yesnocancel_box(TR("Si desidera salvare le modifiche?"));
 | 
						|
      if (k != K_YES)
 | 
						|
        return k == K_NO;
 | 
						|
    }
 | 
						|
    first = false; // D'ora in poi non chiedo piu' conferma
 | 
						|
    
 | 
						|
    clifo.put(CLI_TIPOCF, get(F_TIPO));
 | 
						|
    const long codcf = row->get_long(pos_codcf);
 | 
						|
    clifo.put(CLI_CODCF, codcf);
 | 
						|
    int err = clifo.read(_isequal, _lock); // Locco il cliente da aggiornare
 | 
						|
    
 | 
						|
    if (err == NOERR)
 | 
						|
    {
 | 
						|
      clifo.put(CLI_PAIV, row->get(pos_paiv));
 | 
						|
      clifo.put(CLI_COFI, row->get(pos_cofi));
 | 
						|
      err = clifo.rewrite();               // Aggiorno il record
 | 
						|
    }
 | 
						|
    
 | 
						|
    if (err != NOERR)
 | 
						|
      return error_box("Errore %d durante l'aggiornamento del codice %ld", err, codcf);
 | 
						|
  }
 | 
						|
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
// Salva eventuali modifiche pendenti e ricarica lo sheet 
 | 
						|
// in base alle impostazioni correnti sulla maschera principale
 | 
						|
void TCheck_PIVA_mask::update_sheet()
 | 
						|
{
 | 
						|
  if (save_sheet())
 | 
						|
    load_sheet();
 | 
						|
}
 | 
						|
 | 
						|
// Segna come modificata (F_DIRTY) la riga corrente dello spreadsheet
 | 
						|
void TCheck_PIVA_mask::dirty_sheet_row()
 | 
						|
{
 | 
						|
  TSheet_field& s = sfield(F_CLIFO);
 | 
						|
  TMask& m = s.sheet_mask();
 | 
						|
  m.set(S_DIRTY, "X");
 | 
						|
 | 
						|
  // Sporco "giro" per aggiornare lo sheet
 | 
						|
  if (!m.is_running())
 | 
						|
  {
 | 
						|
    const int sel = s.selected();
 | 
						|
    s.update_row(sel);
 | 
						|
    s.force_update(sel);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
bool TCheck_PIVA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  switch (o.dlg())
 | 
						|
  {
 | 
						|
  case F_TIPO:
 | 
						|
    if (e == fe_init || e == fe_modify)
 | 
						|
      update_sheet();
 | 
						|
    break;
 | 
						|
  case F_COFI:
 | 
						|
    if (e == fe_modify)
 | 
						|
      update_sheet();
 | 
						|
    break;
 | 
						|
  case F_RESET:
 | 
						|
    if (e == fe_button)
 | 
						|
    {
 | 
						|
      TSheet_field& s = sfield(F_CLIFO);
 | 
						|
      FOR_EACH_SHEET_ROW(s, r, row)
 | 
						|
        row->add(" ", 0);
 | 
						|
      s.force_update();
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case DLG_SAVEREC:
 | 
						|
    if (save_sheet())
 | 
						|
      load_sheet();
 | 
						|
    break;
 | 
						|
  case S_PAIV:
 | 
						|
    if (e == fe_modify)
 | 
						|
    {
 | 
						|
      if (pi_check("", o.get()))
 | 
						|
        dirty_sheet_row();
 | 
						|
      else
 | 
						|
        return o.error_box("Partita IVA errata");
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case S_COFI:
 | 
						|
    if (e == fe_modify)
 | 
						|
    {
 | 
						|
      if (cf_check("", o.get()))
 | 
						|
        dirty_sheet_row();
 | 
						|
      else
 | 
						|
        return o.error_box("Codice fiscale errato");
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case DLG_USER:
 | 
						|
    if (e == fe_button)
 | 
						|
    {
 | 
						|
      TMask& m = o.mask();
 | 
						|
      const TString& pi = m.get(S_PAIV);    // Leggo partita IVA e 
 | 
						|
      const TString& cf = m.get(S_COFI);    // codice fiscale
 | 
						|
      if (pi.blank())                       // Tento di compilare la PAIV vuota 
 | 
						|
      {
 | 
						|
        if (cf.full() && pi_check("", cf))
 | 
						|
        {
 | 
						|
          m.set(S_PAIV, cf);
 | 
						|
          dirty_sheet_row();
 | 
						|
        }
 | 
						|
        else
 | 
						|
          return o.error_box(TR("Il codice fiscale rappresenta una partita IVA errata"));
 | 
						|
      } else
 | 
						|
      if (cf.blank())                        // Tento di compilare il COFI vuoto
 | 
						|
      {
 | 
						|
        if (pi.full() && pi_check("", pi))
 | 
						|
        {
 | 
						|
          m.set(S_COFI, pi);
 | 
						|
          dirty_sheet_row();
 | 
						|
        }
 | 
						|
        else
 | 
						|
          return o.error_box(TR("Partita IVA errata"));
 | 
						|
      }
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case DLG_LINK:
 | 
						|
    if (e == fe_button)
 | 
						|
    {
 | 
						|
      TMask& m = o.mask();
 | 
						|
      TLocalisamfile clifo(LF_CLIFO);             // Riempio la chiave 1 di CLIFO  
 | 
						|
      clifo.put(CLI_TIPOCF, get(F_TIPO));         
 | 
						|
      clifo.put(CLI_CODCF, m.get(S_CODCF));
 | 
						|
      if (clifo.curr().edit())                    // Modifica interattiva del cliente
 | 
						|
      {
 | 
						|
        if (clifo.read() == NOERR)                // Se riesco a rileggerlo ...
 | 
						|
        {
 | 
						|
          m.set(S_RAGSOC, clifo.get(CLI_RAGSOC)); // aggiorno la ragione sociale,
 | 
						|
          m.set(S_COFI, clifo.get(CLI_COFI));     // il codice fiscale
 | 
						|
          m.set(S_PAIV, clifo.get(CLI_PAIV));     // e la partita IVA
 | 
						|
          dirty_sheet_row();
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  default: break;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TCheck_PIVA
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TCheck_PIVA : public TSkeleton_application
 | 
						|
{
 | 
						|
public:
 | 
						|
  virtual void main_loop();
 | 
						|
};
 | 
						|
 | 
						|
void TCheck_PIVA::main_loop()
 | 
						|
{
 | 
						|
  TCheck_PIVA_mask m;
 | 
						|
  m.run();
 | 
						|
}
 | 
						|
 | 
						|
void controlla_PIVA(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TCheck_PIVA cp;
 | 
						|
  cp.run(argc, argv, TR("Controllo Partita IVA"));
 | 
						|
}
 |