8abe900362
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"));
|
|
}
|