campo-sirio/cg/cg2800.cpp
guy 77a12a3641 Corretta abilitazione del campo operazione di fine anno sulle causali
git-svn-id: svn://10.65.10.50/trunk@1429 c028cbd2-c16b-5b4b-a496-9718f37d4682
1995-06-01 15:22:56 +00:00

1492 lines
39 KiB
C++
Executable File

// Variazione movimenti di prima nota e movimenti iva
#include <mask.h>
#include <relation.h>
#include <tabutil.h>
#include <utility.h>
#include <config.h>
#include <mailbox.h>
#include <prefix.h>
#include <nditte.h>
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
#include "cglib04.h"
#include "cglib.h"
#include "cg2103.h"
#include "conto.h"
#include "cg2800.h"
#include "cg2801.h"
#include "cg2802.h"
#include "cg2803.h"
HIDDEN TString80 TEMP;
//HIDDEN int date2esc(const TDate& d, int* prevesc = NULL);
class TVar_mov : public TApplication
{
TIsamtempfile* _tmov,* _trmov,* _tiva;
TLocalisamfile* _pcon,* _clifo, *_mov, *_rmov, *_rmoviva;
TTable* _tab_reg;
TRectype* _rec_mov,* _rec_rmov,* _rec_riva;
TTransfer_file _tras_file;
char _scelta;
TString _trasf,_std,_descr_civa;
long _dittaric,_numreg;
TString _control_rec,_record;
bool _righe,_corrisp;
int _numrig,_tiporeg;
public:
TString _titolo;
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
bool main_loop();
bool esegui_controlli();
bool leggi_trasfer();
bool controlli();
void leggi_record_controllo();
bool video_PN();
bool video_IVA();
void registra_PN(TMask& m);
void registra_IVA(TMask& m);
bool esiste_testata_mov(TMask& m);
bool ricerca_movimento(TMask& m);
bool esiste_riga_mov(TMask& m);
bool esiste_riga_iva(TMask& m);
void ricerca_codcaus(const TString& codcaus);
void setta_campi_maschera(TMask& m);
bool setta_campi_maschera_iva(TMask& m);
void registra_file_temp_mov(long,const TDate&,const TDate&,const TString&,TString&,long,long,const TString&,TString&);
void registra_file_trasfer_t(long,int,const TDate&,const TDate&,const TString&,TString&,long,long,const TString&,const TString&);
void registra_file_temp_rmov(long,int,int,int,long,char,const TString&,int,int,long,const real&);
void registra_file_trasfer_r(long,int,int,int,long,char,const TString&,int,int,long,const real&);
void registra_file_trasfer_t_iva(long,const TDate&,long,const TString&,const TString&,const TString&,const TString&,const TString&);
void registra_file_temp_riva(long,int,const real&,const TString&,const real&,int,int,int,int,long);
void registra_file_trasfer_r_iva(long,int,const real&,const TString&,const real&,int,int,int,int,long);
void setta_parametri_record(const TString& sigla,const TString& flag);
const char* converti (TString& data_AS400);
const char* riconverti(TString& data_PC);
static bool codice_registro_hnd (TMask_field& f, KEY k);
static bool codice_causale_hnd (TMask_field& f, KEY k);
static bool numero_protocollo_hnd (TMask_field& f, KEY k);
static bool ultimo_protocollo_hnd (TMask_field& f, KEY k);
static bool codice_pagamento_hnd (TMask_field& f, KEY k);
static bool data_stampa (TMask_field& f, KEY k);
static bool controllo_partita (TMask_field& f, KEY k);
static bool controllo_contropartita (TMask_field& f, KEY k);
static bool controllo_importo (TMask_field& f, KEY k);
static bool codice_clifo_hnd (TMask_field& f, KEY k);
static bool codice_iva_hnd (TMask_field& f, KEY k);
static bool imposta_hnd (TMask_field& f, KEY k);
static bool detraibilita_hnd (TMask_field& f, KEY k);
static bool tipocr_hnd (TMask_field& f, KEY k);
bool decodifica_codiva(const TString& codiva);
TVar_mov(char mov);
};
HIDDEN TVar_mov& app() { return (TVar_mov &) main_app(); }
HIDDEN int date2esc(const TDate& d, int* prevesc)
{
if (prevesc) *prevesc = 0;
TTable esc("ESC");
for (int err = esc.first(); err == NOERR; err = esc.next())
{
const TDate ia(esc.get("D0")); // Data inizio esercizio
const TDate fa(esc.get("D1")); // Data fine esercizio
const anno = esc.get_int("CODTAB");
if (d >= ia && d <= fa)
return anno;
if (prevesc) *prevesc = anno;
}
return 0;
}
TVar_mov::TVar_mov(char mov) : _scelta(toupper(mov))
{
switch (_scelta)
{
case 'P':
_titolo = "Variazione movimenti prima nota";
break;
case 'I':
_titolo = "Variazione movimenti iva";
break;
default:
break;
}
}
bool TVar_mov::create()
{
TApplication::create();
_pcon = new TLocalisamfile (LF_PCON);
_clifo = new TLocalisamfile (LF_CLIFO);
_rec_mov = new TRectype (LF_MOV);
_mov = new TLocalisamfile (LF_MOV);
_rmov = new TLocalisamfile (LF_RMOV);
_rmoviva = new TLocalisamfile (LF_RMOVIVA);
_tab_reg = new TTable ("REG");
if (_scelta == 'P')
{
TString80 tmpmov = "%";
tmpmov << get_firm_dir();
tmpmov << "\\" << TEMP_MOV;
TString80 tmprmov = "%";
tmprmov << get_firm_dir();
tmprmov << "\\" << TEMP_RMOV;
_tmov = new TIsamtempfile(LF_MOV, tmpmov, 0);
_trmov = new TIsamtempfile(LF_RMOV, tmprmov, 0);
_rec_rmov = new TRectype (LF_RMOV);
}
else
if (_scelta == 'I')
{
TString80 tmpmov = "%";
tmpmov << get_firm_dir();
tmpmov << "\\" << TEMP_MOV;
TString80 tmprmoviva = "%";
tmprmoviva << get_firm_dir();
tmprmoviva << "\\" << TEMP_RMOVIVA;
_tmov = new TIsamtempfile(LF_MOV, tmpmov, 0);
_tiva = new TIsamtempfile(LF_RMOVIVA, tmprmoviva, 0);
_rec_riva = new TRectype (LF_RMOVIVA);
}
dispatch_e_menu (BAR_ITEM(1));
return TRUE;
}
bool TVar_mov::destroy()
{
delete _rec_mov;
delete _pcon;
delete _clifo;
delete _mov;
delete _rmov;
delete _rmoviva;
delete _tab_reg;
if (_scelta == 'P')
{
delete _trmov;
delete _rec_rmov;
}
else
if (_scelta == 'I')
{
delete _tiva;
delete _rec_riva;
}
delete _tmov;
return TApplication::destroy();
}
void TVar_mov::leggi_record_controllo()
{
_tras_file.read_control_rec();
_control_rec = _tras_file.record();
}
const char* TVar_mov::converti (TString& data_AS400)
{
TEMP = data_AS400.mid(4,2);
TEMP << "-" <<data_AS400.mid(2,2);
TEMP << "-" <<data_AS400.mid(0,2);
return TEMP;
}
const char* TVar_mov::riconverti (TString& data_PC)
{
TEMP = data_PC.mid(8,2);
TEMP << data_PC.mid(3,2);
TEMP << data_PC.mid(0,2);
return TEMP;
}
bool TVar_mov::main_loop()
{
_dittaric = get_firm();
if (!esegui_controlli()) return FALSE;
if (_scelta == 'P')
{
if (!video_PN())
return FALSE;
}
else
{
if (_scelta == 'I')
if (!video_IVA())
return FALSE;
}
setta_parametri_record(" ","C");
leggi_record_controllo();
TString str (_control_rec.overwrite(" ",241));
_tras_file.write_control_rec(str,256);
return FALSE;
}
bool TVar_mov::video_PN()
{
TMask msk ("cg2800a");
KEY tasto;
do
{
tasto = msk.run();
if (tasto != K_ENTER) return FALSE;
if (ricerca_movimento(msk))
{
TMask mask ("cg2800b");
mask.set_handler(F_REGIVA, codice_registro_hnd);
mask.set_handler(F_CODCAUS, codice_causale_hnd);
mask.set_handler(F_PROTIVA, numero_protocollo_hnd);
mask.set_handler(F_NUPROTIVA, ultimo_protocollo_hnd);
mask.set_handler(F_CODPAG, codice_pagamento_hnd);
mask.set_handler(F_DATAREG, data_stampa);
if (_righe)
{
mask.set_handler(F_SOTTOCONTO, controllo_partita);
mask.set_handler(F_SOTTOC, controllo_contropartita);
mask.set_handler(F_IMPORTO , controllo_importo);
}
setta_campi_maschera(mask);
tasto = mask.run();
switch (tasto)
{
case K_ESC :
break;
case K_QUIT :
break;
case K_SAVE :
{
registra_PN(mask);
}
break;
default:
break;
}
}
}
while (tasto != K_QUIT); //K_ENTER
return TRUE;
}
void TVar_mov::ricerca_codcaus(const TString& codcaus)
{
TLocalisamfile cau (LF_CAUSALI);
TString tipodoc;
cau.setkey(1);
cau.zero();
cau.put("CODCAUS", (const char*) codcaus);
if (cau.read() == NOERR)
tipodoc = cau.get_char("TIPODOC");
TTable tpd ("%TPD");
tpd.zero();
tpd.put("CODTAB", (const char*) tipodoc);
if (tpd.read() == NOERR)
_corrisp = tpd.get_bool("B0");
}
bool TVar_mov::video_IVA()
{
TMask msk ("cg2800a");
KEY tasto;
do
{
tasto = msk.run();
if (tasto != K_ENTER) return FALSE;
if (ricerca_movimento(msk))
{
TMask mask ("cg2800c");
TString regiva = _rec_mov->get (MOV_REG);
if (!setta_campi_maschera_iva(mask))
return FALSE;
mask.set_handler(F_CODCF, codice_clifo_hnd);
if (_righe)
{
mask.set_handler(F_SOTTOCONTO, controllo_partita);
mask.set_handler(F_CODIVA, codice_iva_hnd);
mask.set_handler(F_IMPOSTA, imposta_hnd);
mask.set_handler(F_TIPODET, detraibilita_hnd);
mask.set_handler(F_TIPOCR, tipocr_hnd);
}
tasto = mask.run();
switch (tasto)
{
case K_ESC :
break;
case K_QUIT :
break;
case K_SAVE :
{
registra_IVA(mask);
}
break;
default:
break;
}
}
}
while (tasto != K_QUIT); //K_ENTER
return TRUE;
}
bool TVar_mov::ricerca_movimento(TMask& m)
{
_numrig = atoi(m.get(F_NUMRIG));
if (_numrig == 0)
{
_righe = FALSE;
return esiste_testata_mov(m);
}
else
{
_righe = TRUE;
esiste_testata_mov(m);
if (_scelta == 'P')
return esiste_riga_mov(m);
else
return esiste_riga_iva(m);
}
return TRUE;
}
bool TVar_mov::esiste_testata_mov(TMask& m)
{
long nprog;
_numreg = m.get_long(F_NUMREG);
_tmov->setkey(1);
_tmov->zero();
_tmov->put(MOV_NUMREG, _numreg);
if (_tmov->read() == NOERR)
{
if (_scelta == 'P')
{
nprog = _tmov->get_long(MOV_NUMGIO);
nprog += _tras_file.start('Z');
}
else
if (_scelta == 'I')
{
_tiva->setkey(1);
_tiva->zero();
_tiva->put(RMI_NUMREG, _numreg);
_tiva->read();
long nr = _tiva->get_long(RMI_NUMREG);
if (_numreg != nr)
return error_box("Registrazione richiesta NON PRESENTE tra i movimenti in trasferimento");
nprog = _tmov->get_long(MOV_ANNOIVA);
nprog += _tras_file.start('U');
}
_tras_file.read_rec_trasfer(nprog);
_record = _tras_file.read_rec();
char annullato = _record.sub(248,249)[0];
if (annullato == 'A')
return error_box("Registrazione presente ma ANNULLATA: impossibile variarla");
*_rec_mov = _tmov->curr();
}
else
return error_box("Registrazione richiesta NON PRESENTE tra i movimenti in trasferimento");
return TRUE;
}
bool TVar_mov::esiste_riga_mov(TMask& m)
{
_numreg = m.get_long(F_NUMREG);
_numrig = m.get_int (F_NUMRIG);
_trmov->setkey(1);
_trmov->zero();
_trmov->put(RMV_NUMREG, _numreg);
_trmov->put(RMV_NUMRIG, _numrig);
if (_trmov->read() == NOERR)
{
long nprog = _trmov->get_long(RMV_ANNOES);
nprog += _tras_file.start('Z');
_tras_file.read_rec_trasfer(nprog);
_record = _tras_file.read_rec();
char annullato = _record.sub(248,249)[0];
if (annullato == 'A')
return error_box("Registrazione presente ma ANNULLATA: impossibile variarla");
*_rec_rmov = _trmov->curr();
}
else
return error_box("Registrazione richiesta NON PRESENTE tra i movimenti in trasferimento");
return TRUE;
}
bool TVar_mov::esiste_riga_iva(TMask& m)
{
_numreg = m.get_long(F_NUMREG);
_numrig = m.get_int (F_NUMRIG);
_tiva->setkey(1);
_tiva->zero();
_tiva->put(RMI_NUMREG, _numreg);
_tiva->put(RMI_NUMRIG, _numrig);
if (_tiva->read() == NOERR)
{
long nprog = _tiva->get_long(RMI_ANNOES);
nprog += _tras_file.start('U');
_tras_file.read_rec_trasfer(nprog);
_record = _tras_file.read_rec();
char annullato = _record.sub(248,249)[0];
if (annullato == 'A')
return error_box("Registrazione presente ma ANNULLATA: impossibile variarla");
*_rec_riva = _tiva->curr();
}
else
return error_box("Registrazione richiesta NON PRESENTE tra i movimenti in trasferimento");
return TRUE;
}
void TVar_mov::setta_campi_maschera(TMask& m)
{
int annorif = atoi(_record.sub(21,22));
TDate datareg (_rec_mov->get_date(MOV_DATAREG));
TDate datadoc (_rec_mov->get_date(MOV_DATADOC));
TString numdoc = _rec_mov->get (MOV_NUMDOC);
TString regiva = _rec_mov->get (MOV_REG);
regiva.trim();
long protiva = _rec_mov->get_long(MOV_PROTIVA);
long nuprotiva = _rec_mov->get_long(MOV_UPROTIVA);
TString codcaus = _rec_mov->get (MOV_CODCAUS);
TString codpag = _rec_mov->get (MOV_CODPAG);
codpag.trim();
m.set(F_NUMREG, _numreg);
m.set(F_NUMRIG, _numrig);
m.set(F_DATAREG, datareg.string());
m.set(F_ANNO, annorif);
m.set(F_DATADOC, datadoc.string());
m.set(F_NUMDOC, numdoc);
m.set(F_REGIVA, regiva);
m.set(F_PROTIVA, protiva);
m.set(F_NUPROTIVA, nuprotiva);
m.set(F_CODCAUS, codcaus);
m.set(F_CODPAG, codpag);
m.disable(F_NUMREG);
m.disable(F_NUMRIG);
if (!_righe)
{
m.enable(F_DATAREG);
m.enable(F_ANNO);
m.enable(F_DATADOC);
m.enable(F_NUMDOC);
m.enable(F_REGIVA);
m.enable(F_PROTIVA);
m.enable(F_NUPROTIVA);
m.enable(F_CODCAUS);
m.enable(F_CODPAG);
m.disable(F_GRUPPO);
m.disable(F_CONTO);
m.disable(F_SOTTOCONTO);
m.disable(F_SEZIONE);
m.disable(F_IMPORTO);
m.disable(F_DESCR);
m.disable(F_GRUPPOC);
m.disable(F_CONTOC);
m.disable(F_SOTTOC);
}
else
if (_righe)
{
int gruppo = _trmov->get_int (RMV_GRUPPO);
int conto = _trmov->get_int (RMV_CONTO);
long sottocon = _trmov->get_long(RMV_SOTTOCONTO);
TString sezione = _trmov->get (RMV_SEZIONE);
TString descr = _trmov->get (RMV_DESCR);
int gruppoc = _trmov->get_int (RMV_GRUPPOC);
int contoc = _trmov->get_int (RMV_CONTOC);
long sottoc = _trmov->get_long(RMV_SOTTOCONTOC);
real importo = _trmov->get_real(RMV_IMPORTO);
m.set(F_GRUPPO, gruppo);
m.set(F_CONTO, conto);
m.set(F_SOTTOCONTO, sottocon);
m.set(F_SEZIONE, sezione);
m.set(F_DESCR, descr);
m.set(F_GRUPPOC, gruppoc);
m.set(F_CONTOC, contoc);
m.set(F_SOTTOC, sottoc);
m.set(F_IMPORTO, importo.string());
m.disable(F_DATAREG);
m.disable(F_ANNO);
m.disable(F_DATADOC);
m.disable(F_NUMDOC);
m.disable(F_REGIVA);
m.disable(F_PROTIVA);
m.disable(F_NUPROTIVA);
m.disable(F_CODCAUS);
m.disable(F_CODPAG);
m.enable(F_GRUPPO);
m.enable(F_CONTO);
m.enable(F_SOTTOCONTO);
m.enable(F_SEZIONE);
m.enable(F_IMPORTO);
m.enable(F_DESCR);
m.enable(F_GRUPPOC);
m.enable(F_CONTOC);
m.enable(F_SOTTOC);
}
}
bool TVar_mov::setta_campi_maschera_iva(TMask& m)
{
TDate datareg (_rec_mov->get_date(MOV_DATAREG));
TDate data74ter (_rec_mov->get_date(MOV_DATA74TER));
TString regiva = _rec_mov->get (MOV_REG);
regiva.trim();
TString codcaus = _rec_mov->get (MOV_CODCAUS);
long codcf = _rec_mov->get_long(MOV_CODCF);
TString ragsoc = _record.sub(61,86);
TString ind = _record.sub(86,108);
TString localita = _record.sub(108,126);
TString cap = _record.sub(126,131);
TString prov = _record.sub(131,133);
if (codcaus.not_empty())
ricerca_codcaus(codcaus);
int anno = date2esc(datareg);
char cr = regiva[0];
TString codreg;
if (isdigit(cr))
codreg.format("%03c", cr);
else
codreg.format("%-3c", cr);
TRegistro rg (codreg, anno);
_tiporeg = rg.tipo();
if (regiva.not_empty())
{
if (!rg.ok())
return error_box("Registrazione presente ma con PRIMANOTA ERRATA: correggerla prima");
}
else
return error_box("Campo NON VALIDO o codice NON PRESENTE in archivio");
m.set(F_NUMREG, _numreg);
m.set(F_NUMRIG, _numrig);
m.set(F_DATA74TER, data74ter.string());
m.set(F_CODCF, codcf);
m.set(F_RAGSOCOCC, ragsoc);
m.set(F_INDOCC, ind);
m.set(F_LOCALITA, localita);
m.set(F_CAPOCC, cap);
m.set(F_PROVOCC, prov);
m.disable(F_NUMREG);
m.disable(F_NUMRIG);
if (!_righe)
{
m.enable(F_DATA74TER);
m.enable(F_CODCF);
m.enable(F_RAGSOCOCC);
m.enable(F_INDOCC);
m.enable(F_LOCALITA);
m.enable(F_CAPOCC);
m.enable(F_PROVOCC);
m.disable(F_IMPONIBILE);
m.disable(F_CODIVA);
m.disable(F_IMPOSTA);
m.disable(F_TIPODET);
m.disable(F_TIPOCR);
m.disable(F_GRUPPO);
m.disable(F_CONTO);
m.disable(F_SOTTOCONTO);
}
else
if (_righe)
{
real imponibile (_tiva->get_real(RMI_IMPONIBILE));
TString codiva (_tiva->get (RMI_CODIVA));
real imposta (_tiva->get_real(RMI_IMPOSTA));
int tipodet = _tiva->get_int (RMI_TIPODET);
int tipocr = _tiva->get_int (RMI_TIPOCR);
int gruppo = _tiva->get_int (RMI_GRUPPO);
int conto = _tiva->get_int (RMI_CONTO);
long sottoc = _tiva->get_long(RMI_SOTTOCONTO);
m.set(F_IMPONIBILE, imponibile.string());
m.set(F_CODIVA, codiva);
m.set(F_IMPOSTA, imposta.string());
m.set(F_TIPODET, tipodet);
m.set(F_TIPOCR, tipocr);
m.set(F_GRUPPO, gruppo);
m.set(F_CONTO, conto);
m.set(F_SOTTOCONTO, sottoc);
m.disable(F_DATA74TER);
m.disable(F_CODCF);
m.disable(F_RAGSOCOCC);
m.disable(F_INDOCC);
m.disable(F_LOCALITA);
m.disable(F_CAPOCC);
m.disable(F_PROVOCC);
m.enable(F_IMPONIBILE);
m.enable(F_CODIVA);
m.enable(F_IMPOSTA);
m.enable(F_TIPODET);
m.enable(F_TIPOCR);
m.enable(F_GRUPPO);
m.enable(F_CONTO);
m.enable(F_SOTTOCONTO);
}
return TRUE;
}
bool TVar_mov::codice_registro_hnd(TMask_field& f, KEY k)
{
TTable reg ("REG");
TString descr,dep;
if (k == K_TAB || k == K_ENTER)
{
TString codreg = f.get();
char cr = codreg[0];
TDate datareg (f.mask().get(F_DATAREG));
int anno = date2esc(datareg);
if (isdigit(cr))
dep.format("%04d%03c", anno, cr);
else
dep.format("%04d%-3c", anno, cr);
reg.zero();
reg.put("CODTAB", dep);
if (reg.read() == NOERR)
{
descr = reg.get("S0");
f.mask().set(F_DESCRREG, descr);
}
else
if (codreg.not_empty() && f.mask().is_running())
return warning_box("Codice registro IVA non presente in tabella");
}
return TRUE;
}
bool TVar_mov::codice_causale_hnd(TMask_field& f, KEY k)
{
if (k == K_TAB || k == K_ENTER)
{
TString codcau = f.get();
if (f.mask().is_running())
{
TString codreg = f.mask().get(F_REGIVA);
if (codreg.not_empty())
if (codcau.empty())
return warning_box("Il codice registro IVA e' significativo: deve essere significativo anche il codice causale");
}
TLocalisamfile cau (LF_CAUSALI);
cau.setkey(1);
cau.zero();
cau.put("CODCAUS", codcau);
if (cau.read() == NOERR)
{
const TString& descr = cau.get("DESCR");
f.mask().set(F_DESCRCAU, descr);
}
else
if (f.mask().is_running())
return warning_box("Codice causale non presente in tabella");
}
return TRUE;
}
bool TVar_mov::numero_protocollo_hnd(TMask_field& f, KEY k)
{
if (k != K_ENTER) return FALSE;
TString codreg = f.mask().get(F_REGIVA);
long protiva = atol(f.mask().get(F_PROTIVA));
long uprotiva = atol(f.mask().get(F_NUPROTIVA));
if (codreg.empty())
if (protiva != 0)
return warning_box("Il codice registro IVA non e' significativo: non e' possibile compilare il numero protocollo IVA");
return TRUE;
}
bool TVar_mov::ultimo_protocollo_hnd(TMask_field& f, KEY k)
{
if (k != K_ENTER) return FALSE;
TString codreg = f.mask().get(F_REGIVA);
long protiva = atol(f.mask().get(F_PROTIVA));
long uprotiva = atol(f.mask().get(F_NUPROTIVA));
if (codreg.empty())
if (uprotiva != 0)
return warning_box("Il codice registro IVA non e' significativo: non e' possibile compilare l' ultimo numero protocollo IVA");
if (protiva == 0)
if (uprotiva != 0)
return warning_box("Numero protocollo IVA non significativo: non e' possibile compilare il numero protocollo IVA riepilogato");
return TRUE;
}
bool TVar_mov::codice_pagamento_hnd(TMask_field& f, KEY k)
{
TTable pag ("%CPG");
TString descr,codpag,dep;
if (k == K_TAB || k == K_ENTER)
{
codpag = f.get();
dep.format("%04s", (const char*)codpag);
pag.zero();
pag.put("CODTAB", dep);
if (pag.read() == NOERR)
{
descr = pag.get("S0");
f.mask().set(F_DESCRPAG, descr);
}
else
if (codpag.not_empty() && k == K_ENTER)
return warning_box("Codice pagamento non presente in tabella");
}
return TRUE;
}
bool TVar_mov::data_stampa(TMask_field& f, KEY k)
{
if (k != K_ENTER) return FALSE;
TDate datareg (f.mask().get(F_DATAREG));
const int ae = date2esc(datareg);
TLibro_giornale gio;
gio.read(ae); //se _ae e' zero la read considera come anno quello corrente
if (datareg < gio.last_print())
return warning_box("La data di registrazione e' minore della data di stampa del Libro Giornale");
TString codreg = f.mask().get(F_REGIVA);
if (!codreg.blank()) //movimento iva (fattura)
{
TRegistro rg (codreg, ae);
if (datareg < rg.last_print())
return error_box("La data di registrazione e' minore della data stampa del registro IVA");
}
return TRUE;
}
bool TVar_mov::controllo_partita(TMask_field& f, KEY k)
{
if (k == K_TAB || k == K_ENTER)
{
int gruppo = f.mask().get_int (F_GRUPPO);
int conto = f.mask().get_int (F_CONTO);
long sottoc = f.mask().get_long(F_SOTTOCONTO);
TConto tc (gruppo,conto,sottoc);
TString descr = tc.descrizione();
f.mask().set(F_DESCRPARTITA, descr);
if (k == K_ENTER)
if (!tc.find())
return warning_box("Sottoconto partita non presente in anagrafica Piano dei Conti oppure anagrafica Clienti / Fornitori");
}
return TRUE;
}
bool TVar_mov::controllo_contropartita(TMask_field& f, KEY k)
{
if (k == K_TAB || k == K_ENTER)
{
int gruppo = f.mask().get_int (F_GRUPPOC);
int conto = f.mask().get_int (F_CONTOC);
long sottoc = f.mask().get_long(F_SOTTOC);
TConto tc (gruppo,conto,sottoc);
TString descr = tc.descrizione();
f.mask().set(F_DESCRCPARTITA, descr);
if (k == K_ENTER)
if (gruppo != 0 && conto != 0 && sottoc != 0)
if (!tc.find())
return warning_box("Sottoconto contropartita non presente in anagrafica Piano dei Conti oppure anagrafica Clienti / Fornitori");
}
return TRUE;
}
bool TVar_mov::controllo_importo(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
real importo (f.mask().get(F_IMPORTO));
char sezione = f.mask().get(F_SEZIONE)[0];
if (importo == ZERO && (sezione == 'A' || sezione == 'D') )
return warning_box("L' importo deve essere significativo");
if (sezione == '\0' && importo != ZERO)
return warning_box("La sezione e' nulla: l'importo non puo' essere significativo");
}
return TRUE;
}
bool TVar_mov::codice_clifo_hnd(TMask_field& f, KEY k)
{
char tipo;
if (k == K_TAB || k == K_ENTER)
{
long codcf = atol(f.get());
if (app()._tiporeg == 1)
tipo = 'C';
else
if (app()._tiporeg == 2)
tipo = 'F';
TConto tc (0,0,codcf,tipo);
if (tc.find())
{
TString descr = tc.descrizione();
f.mask().set(F_RAGSOCCF, descr);
}
else
if (k == K_ENTER)
return warning_box("Campo NON VALIDO o codice non presente in archivio");
}
return TRUE;
}
bool TVar_mov::codice_iva_hnd(TMask_field& f, KEY k)
{
if (k == K_TAB || k == K_ENTER)
{
TString codiva = f.get();
bool ok = app().decodifica_codiva(codiva);
f.mask().set(F_DESCRCODIVA, app()._descr_civa);
if (k == K_ENTER)
{
real imponibile (f.mask().get(F_IMPONIBILE));
real imposta (f.mask().get(F_IMPOSTA));
if ( (imponibile != ZERO || imposta != ZERO) && codiva.empty() )
return warning_box("Il codice IVA deve essere indicato obbligatoriamente");
if (codiva.not_empty())
if (!ok)
return warning_box("Codice non presente in tabella");
}
}
return TRUE;
}
bool TVar_mov::decodifica_codiva(const TString& codiva)
{
TTable iva ("%IVA");
TString dep;
dep.format("%-4s", (const char*)codiva);
iva.zero();
iva.put("CODTAB", dep);
if (iva.read() == NOERR)
{
_descr_civa = iva.get("S0");
return TRUE;
}
else
{
_descr_civa = "";
return FALSE;
}
return TRUE;
}
bool TVar_mov::imposta_hnd(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
real imposta (f.mask().get(F_IMPOSTA));
if (app()._corrisp && imposta != ZERO)
return warning_box("Il movimento e' relativo ad un corrispettivo: l'imposta deve essere uguale a 0");
}
return TRUE;
}
bool TVar_mov::detraibilita_hnd(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
int det = atoi(f.get());
if (det != 0 && det != 1 && det != 3 && det != 9)
return warning_box("Valore non ammesso per il tipo detraibilita'");
}
return TRUE;
}
bool TVar_mov::tipocr_hnd(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
int tcr = atoi(f.get());
if (tcr != 0 && tcr != 1 && tcr != 2 && tcr != 3
&& tcr != 4 && tcr != 5 && tcr != 8 && tcr != 9)
return warning_box("Valore non ammesso per il tipo costo/ricavo");
}
return TRUE;
}
void TVar_mov::registra_PN(TMask& m)
{
if (!_righe)
{
long numreg = m.get_long(F_NUMREG);
int annorif = m.get_int (F_ANNO);
TDate datareg (m.get(F_DATAREG));
TDate datadoc (m.get(F_DATADOC));
TString numdoc = m.get (F_NUMDOC);
TString regiva = m.get (F_REGIVA);
long protiva = m.get_long(F_PROTIVA);
long nuprotiva = m.get_long(F_NUPROTIVA);
TString codcaus = m.get (F_CODCAUS);
TString codpag = m.get (F_CODPAG);
registra_file_temp_mov(numreg,datareg,datadoc,numdoc,regiva,protiva,nuprotiva,codcaus,codpag);
registra_file_trasfer_t(numreg,annorif,datareg,datadoc,numdoc,regiva,protiva,nuprotiva,codcaus,codpag);
}
else
if (_righe)
{
long numreg = m.get_long(F_NUMREG);
int numrig = m.get_int (F_NUMRIG);
int gruppo = m.get_int (F_GRUPPO);
int conto = m.get_int (F_CONTO);
long sottoc = m.get_long(F_SOTTOCONTO);
char sezione = m.get (F_SEZIONE)[0];
TString descr = m.get (F_DESCR);
int gruppoc = m.get_int (F_GRUPPOC);
int contoc = m.get_int (F_CONTOC);
long sottocc = m.get_long(F_SOTTOC);
real importo (m.get(F_IMPORTO));
registra_file_temp_rmov(numreg,numrig,gruppo,conto,sottoc,sezione,descr,gruppoc,contoc,sottocc,importo);
registra_file_trasfer_r(numreg,numrig,gruppo,conto,sottoc,sezione,descr,gruppoc,contoc,sottocc,importo);
}
}
void TVar_mov::registra_file_temp_mov(long nr,const TDate& dr,const TDate& dd,const TString& nd,TString& ri,
long pi,long upi,const TString& cc,TString& cp)
{
_tmov->setkey(1);
_tmov->zero();
_tmov->put(MOV_NUMREG, nr);
if (_tmov->read() == NOERR)
{
_tmov->put(MOV_DATAREG, dr);
_tmov->put(MOV_DATADOC, dd);
_tmov->put(MOV_NUMDOC, nd);
_tmov->put(MOV_REG, ri);
_tmov->put(MOV_PROTIVA, pi);
_tmov->put(MOV_UPROTIVA, upi);
_tmov->put(MOV_CODCAUS, cc);
_tmov->put(MOV_CODPAG, cp);
_tmov->rewrite();
}
}
void TVar_mov::registra_file_trasfer_t(long nr,int ar,const TDate& dr,const TDate& dd,const TString& nd,TString& ri,
long pi,long upi,const TString& cc,const TString& cp)
{
TString app,str;
TRectype* rec;
rec = new TRectype (LF_RMOV);
_trmov->setkey(1);
_trmov->zero();
_trmov->put(RMV_NUMREG, nr);
*rec = _trmov->curr();
for (_trmov->read(); !_trmov->eof(); _trmov->next())
{
if (_trmov->curr() > *rec) break;
long numrec = _trmov->get_int(RMV_ANNOES);
numrec += _tras_file.start('Z');
_tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota
app = dr.string();
str = riconverti(app);
_tras_file.put(str,"Z1",0,numrec);
app = dd.string();
str = riconverti(app);
_tras_file.put(str,"Z1",4,numrec);
str = format("%d", ar);
_tras_file.put(str,"Z1",50,numrec);
str = format("%-7s", (const char*) nd);
_tras_file.put(str,"Z1",5,numrec);
if (ri == "")
ri = " ";
_tras_file.put(ri,"Z1",6,numrec);
_tras_file.put(cc,"Z1",8,numrec);
str = format("%05ld", pi);
_tras_file.put(str,"Z1",7,numrec);
str = format("%05ld", upi);
_tras_file.put(str,"Z1",10,numrec);
str = format("%2s", (const char*) cp);
_tras_file.put(str,"Z1",9,numrec);
_tras_file.write(numrec);
}
delete rec;
}
void TVar_mov::registra_file_temp_rmov(long nr,int nri,int g,int c,long s,char sez,const TString& desc,
int gc,int cc,long sc,const real& imp)
{
_trmov->setkey(1);
_trmov->zero();
_trmov->put(RMV_NUMREG, nr);
_trmov->put(RMV_NUMRIG, nri);
if (_trmov->read() == NOERR)
{
_trmov->put(RMV_GRUPPO, g);
_trmov->put(RMV_CONTO, c);
_trmov->put(RMV_SOTTOCONTO, s);
_trmov->put(RMV_SEZIONE, sez);
_trmov->put(RMV_DESCR, desc);
_trmov->put(RMV_GRUPPOC, gc);
_trmov->put(RMV_CONTOC, cc);
_trmov->put(RMV_SOTTOCONTOC, sc);
_trmov->put(RMV_IMPORTO, imp);
_trmov->rewrite();
}
}
void TVar_mov::registra_file_trasfer_r(long nr,int nri,int g,int c,long s,char sez,const TString& desc,
int gc,int cc,long sc,const real& imp)
{
TString app,str;
_trmov->setkey(1);
_trmov->zero();
_trmov->put(RMV_NUMREG, nr);
_trmov->put(RMV_NUMRIG, nri);
if (_trmov->read() == NOERR)
{
long numrec = _trmov->get_int(RMV_ANNOES);
numrec += _tras_file.start('Z');
_tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota
str = format("%02d", g);
_tras_file.put(str,"Z1",17,numrec);
str = format("%02d", c);
_tras_file.put(str,"Z1",18,numrec);
str = format("%06ld", s);
_tras_file.put(str,"Z1",19,numrec);
str = format("%c", sez);
_tras_file.put(str,"Z1",20,numrec);
str = format("%-30s", (const char*)desc);
_tras_file.put(str,"Z1",16,numrec);
str = format("%02d", gc);
_tras_file.put(str,"Z1",21,numrec);
str = format("%02d", cc);
_tras_file.put(str,"Z1",22,numrec);
str = format("%06ld", sc);
_tras_file.put(str,"Z1",23,numrec);
str = format("%011s", (const char*) imp.string());
_tras_file.put(str,"Z1",24,numrec);
_tras_file.write(numrec);
}
}
void TVar_mov::registra_IVA(TMask& m)
{
if (!_righe)
{
long numreg = m.get_long(F_NUMREG);
TDate data74ter (m.get(F_DATA74TER));
long codcf = m.get_long(F_CODCF);
TString ragsococc = m.get (F_RAGSOCOCC);
TString indocc = m.get (F_INDOCC);
TString localita = m.get (F_LOCALITA);
TString capocc = m.get (F_CAPOCC);
TString provocc = m.get (F_PROVOCC);
_tmov->setkey(1);
_tmov->zero();
_tmov->put(MOV_NUMREG, numreg);
if (_tmov->read() == NOERR)
{
_tmov->put(MOV_DATA74TER, data74ter);
_tmov->put(MOV_CODCF, codcf);
_tmov->rewrite();
}
registra_file_trasfer_t_iva(numreg,data74ter,codcf,ragsococc,indocc,localita,capocc,provocc);
}
else
if (_righe)
{
long numreg = m.get_long(F_NUMREG);
int numrig = m.get_int (F_NUMRIG);
real imponibile (m.get (F_IMPONIBILE));
TString codiva = m.get (F_CODIVA);
real imposta (m.get (F_IMPOSTA));
int tipodet = m.get_int (F_TIPODET);
int tipocr = m.get_int (F_TIPOCR);
int gruppo = m.get_int (F_GRUPPO);
int conto = m.get_int (F_CONTO);
long sottoc = m.get_long(F_SOTTOCONTO);
registra_file_temp_riva(numreg,numrig,imponibile,codiva,imposta,tipodet,tipocr,gruppo,conto,sottoc);
registra_file_trasfer_r_iva(numreg,numrig,imponibile,codiva,imposta,tipodet,tipocr,gruppo,conto,sottoc);
}
}
void TVar_mov::registra_file_trasfer_t_iva(long nr,const TDate& d74,long cf,const TString& rgo,const TString& io,
const TString& lo,const TString& co,const TString& po)
{
TString app,str;
TRectype* rec;
rec = new TRectype (LF_RMOVIVA);
_tiva->setkey(1);
_tiva->zero();
_tiva->put(RMI_NUMREG, nr);
*rec = _tiva->curr();
for (_tiva->read(); !_tiva->eof(); _tiva->next())
{
if (_tiva->curr() > *rec) break;
long numrec = _tiva->get_int(RMI_ANNOES);
numrec += _tras_file.start('U');
_tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota
app = d74.string();
str = riconverti(app);
_tras_file.put(str,"U1",4,numrec);
str = format("%06d", cf);
_tras_file.put(str,"U1",6,numrec);
str = format("%-25s", (const char*)rgo );
_tras_file.put(str,"U1",50,numrec);
str = format("%-22s", (const char*)io);
_tras_file.put(str,"U1",51,numrec);
str = format("%-18s", (const char*)lo);
_tras_file.put(str,"U1",52,numrec);
str = format("%05s", (const char*)co );
_tras_file.put(str,"U1",53,numrec);
str = format("%-2s", (const char*)po);
_tras_file.put(str,"U1",54,numrec);
_tras_file.write(numrec);
}
delete rec;
}
void TVar_mov::registra_file_temp_riva(long nr,int nri,const real& imp,const TString& civa,const real& imposta,
int tdet,int tcr,int g,int c,long s)
{
_tiva->setkey(1);
_tiva->zero();
_tiva->put(RMI_NUMREG, nr);
_tiva->put(RMI_NUMRIG, nri);
if (_tiva->read() == NOERR)
{
_tiva->put(RMI_IMPONIBILE, imp);
_tiva->put(RMI_CODIVA, civa);
_tiva->put(RMI_IMPOSTA, imposta);
_tiva->put(RMI_TIPODET, tdet);
_tiva->put(RMI_TIPOCR, tcr);
_tiva->put(RMI_GRUPPO, g);
_tiva->put(RMI_CONTO, c);
_tiva->put(RMI_SOTTOCONTO, s);
_tiva->rewrite();
}
}
void TVar_mov::registra_file_trasfer_r_iva(long nr,int nri,const real& imp,const TString& civa,const real& imposta,
int tdet,int tcr,int g,int c,long s)
{
TString app,str;
_tiva->setkey(1);
_tiva->zero();
_tiva->put(RMI_NUMREG, nr);
_tiva->put(RMI_NUMRIG, nri);
if (_tiva->read() == NOERR)
{
long numrec = _tiva->get_int(RMI_ANNOES);
numrec += _tras_file.start('U');
_tras_file.read_rec_trasfer(numrec); //Leggo il record dell' iva
str = format("%011s", (const char*) imp.string());
_tras_file.put(str,"U1",14,numrec);
str = format("%02s", (const char*) civa);
_tras_file.put(str,"U1",13,numrec);
str = format("%09s", (const char*) imposta.string());
_tras_file.put(str,"U1",15,numrec);
str = format("%d", tdet);
_tras_file.put(str,"U1",16,numrec);
str = format("%d", tcr);
_tras_file.put(str,"U1",17,numrec);
str = format("%02d", g);
_tras_file.put(str,"U1",19,numrec);
str = format("%02d", c);
_tras_file.put(str,"U1",20,numrec);
str = format("%06ld", s);
_tras_file.put(str,"U1",21,numrec);
_tras_file.write(numrec);
}
}
bool TVar_mov::leggi_trasfer()
{
_trasf = _tras_file.path(_dittaric);
_trasf << "\\trasfer";
_tras_file.open(_trasf);
if (_tras_file.exist())
{
if (_tras_file.read_control_rec())
_control_rec = _tras_file.record();
else
return error_box("Rilevati gravi errori negli archivi:procedura interrotta");
}
else
return error_box("Al momento non presenti trasferimenti attivi sulla ditta selezionata");
return TRUE;
}
bool TVar_mov::esegui_controlli()
{
TConfig conf(CONFIG_DITTA);
_std = conf.get("FlStTra");
if (!prefix().exist(_dittaric))
return error_box("Rilevati gravi errori negli archivi: procedura interrotta");
if (!leggi_trasfer())
return FALSE;
if (!controlli())
return FALSE;
return TRUE;
}
void TVar_mov::setta_parametri_record(const TString& sigla,const TString& flag)
{
TConfig conf (CONFIG_DITTA);
conf.set("FlStTra", flag);
leggi_record_controllo();
_control_rec.overwrite(sigla,240);
const int size = 256;
_tras_file.write_control_rec(_control_rec, size);
}
bool TVar_mov::controlli()
{
if (_std == "T")
return error_box("Variazione NON POSSIBILE: eseguire prima la ricezione delle tabelle");
if (_std == "M")
return error_box("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato");
if (_std == "*")
{
warning_box("Trasferimento interamente completato: proseguire per cancellare il file");
fremove(_trasf);
return FALSE;
}
return TRUE;
}
bool TVar_mov::menu(MENU_TAG m)
{
if (m == BAR_ITEM(1))
return main_loop();
return FALSE;
}
int cg2800 (int argc, char* argv[])
{
switch (*argv[2])
{
case 'P':
{
TVar_mov main_app(*argv[2]);
main_app.run(argc, argv,main_app._titolo);
}
break;
case 'I':
{
TVar_mov main_app(*argv[2]);
main_app.run(argc, argv,main_app._titolo);
}
break;
case 'S':
{
TDitta_ric a;
a.run(argc, argv,"Scelta ditta per ricezione");
}
break;
case 'A':
{
TAnn_mov a;
a.run(argc, argv,"Annullamento movimenti da ricevere");
}
break;
case 'V':
{
TVis_ric a;
a.run(argc, argv,"Visualizzazione stato ricezione");
}
break;
default:
break;
}
//main_app.run(argc, argv,main_app._titolo);
return TRUE;
}