Patch level : 12.0 804

Files correlati     : fp0.exe, cg2.exe, f23.dirr, f23.trr, cg2100c.msk, fp0400a.msk
Commento            :
- Tolto codice protocollo dai movimenti, non serve
- Aggiunto flag periodo liquidazinoe precedente default (f1)
- Aggiunta a contabil. autom.: scadenze, importi e imponibili
- Risolto problema visualizzazione massimo 4 righe log contabil.
- Aggiunti num reg e prot iva in messaggio di log
This commit is contained in:
Simone Palacino 2019-05-30 10:15:42 +02:00
parent 9e562a7dd8
commit a0fd9503b8
12 changed files with 304 additions and 232 deletions

View File

@ -54,7 +54,7 @@ public:
TPrimanota_application::TPrimanota_application()
: _rel(NULL), _mode(0), _iva(nessuna_iva), _causale(NULL), _giornale(NULL),
_lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(NULL), _swap_mask(false), _is_set_fpcheck(false)
_lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(NULL), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false)
{
memset(_msk, 0, sizeof(_msk));
}
@ -125,8 +125,6 @@ TMask* TPrimanota_application::load_mask(int n)
ism.set_handler(CG_RISCONTO, sheet_risconto_handler);
if (!has_f1_db(m))
{
if (m->find_by_id(F_PROTFPPRO) != NULL)
m->hide(F_PROTFPPRO);
if (m->find_by_id(F_COLFPPRO) != NULL)
m->hide(F_COLFPPRO);
if(m->find_by_id(DLG_LINK) != NULL)
@ -227,6 +225,22 @@ TMask* TPrimanota_application::load_mask(int n)
return m;
}
void TPrimanota_application::check_f1_ini()
{
for (int i = 0; i < argc(); i++)
{
TString arg(argv(i));
if (arg.find("-f1") != -1)
{
_f1_ini = true;
}
if (arg.find("-liq") != -1)
{
_f1_liq = true;
}
}
}
bool TPrimanota_application::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CAUSALI, LF_RCAUSALI, LF_CLIFO, LF_PCON, 0);
@ -253,7 +267,8 @@ bool TPrimanota_application::user_create()
load_mask(0);
load_colors();
check_f1_ini();
return true;
}
@ -953,16 +968,12 @@ void TPrimanota_application::init_insert_mode(TMask& m)
void TPrimanota_application::f1_init_modify(TMask& m, const TRectype& mov)
{
const bool after_data_inizio_fe = TDate(mov.get(MOV_DATADOC)) >= TDate(fp_settings().get_data_start_fatt());
if (m.find_by_id(F_PROTFPPRO) != NULL && !m.field(F_PROTFPPRO).hidden() && after_data_inizio_fe)
{
m.set(F_PROTFPPRO, mov.get(MOV_PROGFPPRO));
if (m.find_by_id(F_COLFPPRO) != NULL && after_data_inizio_fe)
m.set(F_COLFPPRO, mov.get(MOV_KEYFPPRO).empty() ? " " : "X");
}
else if(m.find_by_id(F_PROTFPPRO) != NULL && !m.field(F_PROTFPPRO).hidden() && !after_data_inizio_fe)
else if(m.find_by_id(F_COLFPPRO) != NULL && !after_data_inizio_fe)
{
m.field(F_PROTFPPRO).hide();
m.field(F_COLFPPRO).hide();
m.field(DLG_LINK).hide();
m.field(DLG_LINK).disable();
}
}
@ -2045,203 +2056,212 @@ HIDDEN bool add_not_empty(TToken_string& str, int pos, TConfig& ini, const char*
void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
{
TRelation_application::ini2mask(ini, msk, query);
if (query)
{
set_not_empty(msk, F_CODCAUS, ini, MOV_CODCAUS);
TString16 val = ini.get(MOV_DATAREG);
if (val.blank())
{
const long numreg = ini.get_long(MOV_NUMREG);
if (numreg > 0)
{
TLocalisamfile& mov = _rel->file();
mov.put(MOV_NUMREG, numreg);
if (mov.read() == NOERR)
val = mov.get(MOV_DATAREG); // Serve ad evitare segnalazioni su esercizi non esistenti
}
if (val.blank())
val = TDate(TODAY).string();
}
msk.set(F_DATAREG, val);
}
else
{
_as400 = false;
if (ini.set_paragraph("24,1"))
_as400 = !ini.exist(RMV_ROWTYPE) && ini.get_int(RMV_NUMRIG) == 1;
TRelation_application::ini2mask(ini, msk, query);
if (query)
{
set_not_empty(msk, F_CODCAUS, ini, MOV_CODCAUS);
TString16 val = ini.get(MOV_DATAREG);
if (val.blank())
{
const long numreg = ini.get_long(MOV_NUMREG);
if (numreg > 0)
{
TLocalisamfile& mov = _rel->file();
mov.put(MOV_NUMREG, numreg);
if (mov.read() == NOERR)
val = mov.get(MOV_DATAREG); // Serve ad evitare segnalazioni su esercizi non esistenti
}
if (val.blank())
val = TDate(TODAY).string();
}
msk.set(F_DATAREG, val);
}
else
{
_as400 = false;
if (ini.set_paragraph("24,1"))
_as400 = !ini.exist(RMV_ROWTYPE) && ini.get_int(RMV_NUMRIG) == 1;
if (msk.id2pos(F_ANNORIF) > 0)
set_not_empty(msk, F_ANNORIF, ini, PART_ANNO);
if (msk.id2pos(F_NUMRIF) > 0)
set_not_empty(msk, F_NUMRIF, ini, PART_NUMPART);
if (iva() != nessuna_iva)
{
if (iva() != nessuna_iva)
{
if (msk.id2pos(F_SOLAIVA) >= 0 && ini.exist("SOLAIVA"))
msk.set(F_SOLAIVA, ini.get("SOLAIVA"));
if (msk.id2pos(F_CODIVA) >= 0)
msk.set(F_CODIVA, ini.get("CODIVA"));
add_cgs_tot(msk);
TSheet_field& is = ivas();
for (int i = 0; ini.set_paragraph(LF_RMOVIVA, i+1); i++)
{
TToken_string& riga = is.row(i);
iva_notify(is, i, K_SPACE);
add_not_empty(riga, 0, ini, RMI_IMPONIBILE); // Imponibile 101
add_not_empty(riga, 1, ini, RMI_CODIVA); // IVA 102
add_not_empty(riga, 2, ini, RMI_TIPODET); // Detrazione 103
add_not_empty(riga, 3, ini, RMI_IMPOSTA); // Imposta 104
TBill c; ini2bill(ini, c, false);
if (c.gruppo() > 0)
c.add_to(riga, 4, 0x7); // Conto 105-110
iva_notify(is, i, K_ENTER);
}
add_cgs_tot(msk);
// Genera eventuali righe per ritenute fiscali e sociali
const short frit[4] = { F_RITFIS, F_RITSOC, F_REVCHARGE, 0 };
const char trit[4] = { 'F', 'S', 'V', '\0' };
for (int i = 0; frit[i]; i++)
{
TEdit_field& ritfld = msk.efield(frit[i]);
if (!ritfld.empty() && ritfld.active())
add_cgs_ritenute(trit[i]);
}
TSheet_field& is = ivas();
for (int i = 0; ini.set_paragraph(LF_RMOVIVA, i + 1); i++)
{
TToken_string& riga = is.row(i);
calcola_imp(); // Calcola totale imponibile ed imposte
}
TSheet_field& cg = cgs();
for (int i = 0; ini.set_paragraph(format("%d,%d", LF_RMOV, i+1)); i++)
{
char tipo = ini.get_char(RMV_ROWTYPE);
if (tipo < ' ') tipo = ' ';
TBill conto; ini2bill(ini, conto, false);
if (_as400 && conto.tipo() <= ' ')
conto.find();
iva_notify(is, i, K_SPACE);
add_not_empty(riga, 0, ini, RMI_IMPONIBILE); // Imponibile 101
add_not_empty(riga, 1, ini, RMI_CODIVA); // IVA 102
add_not_empty(riga, 2, ini, RMI_TIPODET); // Detrazione 103
add_not_empty(riga, 3, ini, RMI_IMPOSTA); // Imposta 104
int numrig = ini.get_int(RMV_NUMRIG)-1;
if (numrig != i) // Controllo se ho un numero riga valido
{
numrig = -1; // Normalmente aggiungi la riga in fondo
// Cerca una riga che abbia già il tipo ed il conto richiesto
if (strchr(" DINT", tipo) != NULL)
{
int nr = -1;
if (tipo == 'I' || tipo == ' ')
nr = bill2pos(conto, tipo);
else
nr = type2pos(tipo);
if (nr < 0)
tipo = ' ';
else
if (get_cgs_imp(nr).is_zero() || tipo == 'T')
numrig = nr;
}
}
TToken_string& riga = cg.row(numrig);
if (numrig < 0 || _as400 || !(cg.cell_disabled(numrig, 0) && cg.cell_disabled(numrig, 1)))
{
TString4 sez = ini.get(RMV_SEZIONE); sez.strip("\"");
if (sez == "A" || sez == "D")
{
TImporto import(sez[0], real(ini.get(RMV_IMPORTO)));
if (!import.is_zero())
import.add_to(riga, 0); // Dare/Avere 101-102
}
}
if (numrig < 0 || !cg.cell_disabled(numrig, 3))
{
if (conto.gruppo() > 0)
conto.add_to(riga, 2, 0x3); // Conto 103-107
}
riga.add("", 7); // Codice descrizione 108
add_not_empty(riga, 8, ini, RMV_DESCR); // Descrizione riga 109
ini2bill(ini, conto, true);
if (conto.gruppo() > 0)
conto.add_to(riga, 9, 0x3); // Contropartita 110-114
TBill c; ini2bill(ini, c, false);
if (c.gruppo() > 0)
c.add_to(riga, 4, 0x7); // Conto 105-110
add_cup_or_cig(CG_CUP, ini, riga); // CUP 115-116
add_cup_or_cig(CG_CIG, ini, riga); // CIG 117-118
riga.add(tipo, cg.cid2index(CG_ROWTYPE)); // Tipo di riga 119
}
if (is_fattura())
{
if (msk.insert_mode())
{
// Propone condizioni di pagamento e banche
TEdit_field& clifo = msk.efield(F_CODCLIFOR);
if (!clifo.empty() && clifo.active())
{
clifo.set_focusdirty();
clifo.on_hit(); // was clifo_handler(clifo, K_TAB);
}
}
TSheet_field& pag = pags();
const int start_items = pag.items();
msk.reset(FS_RECALC); // Disabilita ricalcolo automatico
for (int i = 0; ini.set_paragraph(format("%d,%d", LF_SCADENZE, i+1)); i++)
{
TToken_string& row = pag.row(i);
if (i >= start_items)
pag_notify(pag, i, K_CTRL+K_INS);
pag_notify(pag, i, K_SPACE);
add_not_empty(row, 0, ini, SCAD_DATASCAD);
add_not_empty(row, 1, ini, SCAD_IMPORTO);
add_not_empty(row, 2, ini, SCAD_IMPORTOVAL);
// pag_notify(pag, i, K_ENTER);
iva_notify(is, i, K_ENTER);
}
int i;
for (i = 0; i < pag.items(); i++)
{
TToken_string& row = pag.row(i);
// Genera eventuali righe per ritenute fiscali e sociali
const short frit[4] = { F_RITFIS, F_RITSOC, F_REVCHARGE, 0 };
const char trit[4] = { 'F', 'S', 'V', '\0' };
for (int i = 0; frit[i]; i++)
{
TEdit_field& ritfld = msk.efield(frit[i]);
if (!ritfld.empty() && ritfld.active())
add_cgs_ritenute(trit[i]);
}
calcola_imp(); // Calcola totale imponibile ed imposte
}
TSheet_field& cg = cgs();
for (int i = 0; ini.set_paragraph(format("%d,%d", LF_RMOV, i + 1)); i++)
{
char tipo = ini.get_char(RMV_ROWTYPE);
if (tipo < ' ') tipo = ' ';
TBill conto; ini2bill(ini, conto, false);
if (_as400 && conto.tipo() <= ' ')
conto.find();
int numrig = ini.get_int(RMV_NUMRIG) - 1;
if (numrig != i) // Controllo se ho un numero riga valido
{
numrig = -1; // Normalmente aggiungi la riga in fondo
// Cerca una riga che abbia già il tipo ed il conto richiesto
if (strchr(" DINT", tipo) != NULL)
{
int nr = -1;
if (tipo == 'I' || tipo == ' ')
nr = bill2pos(conto, tipo);
else
nr = type2pos(tipo);
if (nr < 0)
tipo = ' ';
else
if (get_cgs_imp(nr).is_zero() || tipo == 'T')
numrig = nr;
}
}
TToken_string& riga = cg.row(numrig);
if (numrig < 0 || _as400 || !(cg.cell_disabled(numrig, 0) && cg.cell_disabled(numrig, 1)))
{
TString4 sez = ini.get(RMV_SEZIONE); sez.strip("\"");
if (sez == "A" || sez == "D")
{
TImporto import(sez[0], real(ini.get(RMV_IMPORTO)));
if (!import.is_zero())
import.add_to(riga, 0); // Dare/Avere 101-102
}
}
if (numrig < 0 || !cg.cell_disabled(numrig, 3))
{
if (conto.gruppo() > 0)
conto.add_to(riga, 2, 0x3); // Conto 103-107
}
riga.add("", 7); // Codice descrizione 108
add_not_empty(riga, 8, ini, RMV_DESCR); // Descrizione riga 109
ini2bill(ini, conto, true);
if (conto.gruppo() > 0)
conto.add_to(riga, 9, 0x3); // Contropartita 110-114
add_cup_or_cig(CG_CUP, ini, riga); // CUP 115-116
add_cup_or_cig(CG_CIG, ini, riga); // CIG 117-118
riga.add(tipo, cg.cid2index(CG_ROWTYPE)); // Tipo di riga 119
}
if (is_fattura())
{
if (msk.insert_mode())
{
// Propone condizioni di pagamento e banche
TEdit_field& clifo = msk.efield(F_CODCLIFOR);
if (!clifo.empty() && clifo.active())
{
clifo.set_focusdirty();
clifo.on_hit(); // was clifo_handler(clifo, K_TAB);
}
}
TSheet_field& pag = pags();
const int start_items = pag.items();
msk.reset(FS_RECALC); // Disabilita ricalcolo automatico
for (int i = 0; ini.set_paragraph(format("%d,%d", LF_SCADENZE, i + 1)); i++)
{
TToken_string& row = pag.row(i);
if (i >= start_items)
pag_notify(pag, i, K_CTRL + K_INS);
pag_notify(pag, i, K_SPACE);
add_not_empty(row, 0, ini, SCAD_DATASCAD);
add_not_empty(row, 1, ini, SCAD_IMPORTO);
add_not_empty(row, 2, ini, SCAD_IMPORTOVAL);
// pag_notify(pag, i, K_ENTER);
}
int i;
for (i = 0; i < pag.items(); i++)
{
TToken_string& row = pag.row(i);
row.add(msk.get(FS_NSABI), 7);
row.add(msk.get(FS_NSCAB), 8);
row.add(msk.get(FS_VSABI), 9);
row.add(msk.get(FS_VSCAB), 10);
pag_notify(pag, i, K_ENTER);
}
row.add(msk.get(FS_NSCAB), 8);
row.add(msk.get(FS_VSABI), 9);
row.add(msk.get(FS_VSCAB), 10);
pag_notify(pag, i, K_ENTER);
}
// In inserimento tento di riempire anche le scadenze
if (msk.insert_mode() && (i == 0 || real::is_null(pag.row(0).get(1))))
{
TString4 codpag = msk.get(F_CODPAG);
if (codpag.empty())
{
TToken_string key;
key = iva() == iva_acquisti ? "F" : "C";
key.add(ini.get(MOV_CODCF, "23"));
codpag = cache().get(LF_CLIFO, key, CLI_CODPAG);
}
if (codpag.full())
{
msk.set(FS_RECALC, "X"); // Forza ricalcolo automatico
msk.set(F_CODPAG, codpag);
set_scadenze(msk);
}
}
// In inserimento tento di riempire anche le scadenze
if (msk.insert_mode() && (i == 0 || real::is_null(pag.row(0).get(1))))
{
TString4 codpag = msk.get(F_CODPAG);
if (codpag.empty())
{
TToken_string key;
key = iva() == iva_acquisti ? "F" : "C";
key.add(ini.get(MOV_CODCF, "23"));
codpag = cache().get(LF_CLIFO, key, CLI_CODPAG);
}
if (codpag.full())
{
msk.set(FS_RECALC, "X"); // Forza ricalcolo automatico
msk.set(F_CODPAG, codpag);
set_scadenze(msk);
}
}
pagamento().set_sheet(pag);
}
}
pagamento().set_sheet(pag);
}
}
if (_f1_ini && msk.find_by_id(FS_RECALC) != NULL)
msk.set(FS_RECALC, "");
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != NULL)
{
TDate datadoc(msk.get(F_DATADOC)); datadoc.set_day(1);
TDate datareg(msk.get(F_DATAREG)); datareg.set_day(1);
if(datadoc < datareg)
msk.set(F_DIFFERITA, "X");
}
}
bool TPrimanota_application::save(bool check_dirty)
@ -2462,9 +2482,6 @@ int TPrimanota_application::save_fppro()
return pro_notsaved;
}
/*const TString keyprginvio = fp_db().sq_get("PZ_KEYPRGINVIO");
const TString keyheaderfatt = fp_db().sq_get("PZ_KEYHEADERFATT");
const TString keybodyfatt = fp_db().sq_get("PZ_KEYBODYFATT");*/
const int numregcont = msk.get_int(F_NUMREG);
const int clifor = msk.get_int(F_CODCLIFOR);
@ -2485,7 +2502,6 @@ bool TPrimanota_application::save_dbmov() const
const TMask& msk = curr_mask();
const TString& numreg = msk.get(H_NUMREG);
const TString& keyfppro = msk.get(F_PROKEY);
const TString& progfppro = msk.get(F_PROTFPPRO);
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg);
@ -2493,7 +2509,6 @@ bool TPrimanota_application::save_dbmov() const
if (ok)
{
mov.put(MOV_KEYFPPRO, keyfppro);
mov.put(MOV_PROGFPPRO, progfppro);
ok = mov.rewrite() == NOERR;
}
return ok;

View File

@ -19,7 +19,6 @@
#define F_DATACOMP 116
#define F_ANNOIVA 117
#define F_NUMDOCEXT 130
#define F_PROTFPPRO 230
#define F_RITFATT 231
#define F_PROKEY 232
#define F_COLFPPRO 233

View File

@ -615,13 +615,6 @@ BEGIN
FLAGS "D"
END
STRING F_PROTFPPRO 18
BEGIN
PROMPT 1 19 "Codice Protocollo FPPRO "
FIELD PROGFPPRO
FLAGS "D"
END
STRING F_PROKEY 80
BEGIN
PROMPT 1 18 "db key"

View File

@ -2264,15 +2264,11 @@ void TPrimanota_application::check_fppro_fields(TMask& m)
{
if (!check_causale(m.get(F_CODCAUS)) || !app().has_f1_db(&m))
{
if(m.find_by_id(F_PROTFPPRO) != NULL)
m.hide(F_PROTFPPRO);
if(m.find_by_id(DLG_LINK) != NULL)
m.disable(DLG_LINK);
}
else
{
if (m.find_by_id(F_PROTFPPRO) != NULL && m.field(F_PROTFPPRO).hidden())
m.show(F_PROTFPPRO);
if (m.find_by_id(DLG_LINK) != NULL)
m.enable(DLG_LINK);
if (m.find_by_id(F_COLFPPRO) != NULL)

View File

@ -100,6 +100,8 @@ class TPrimanota_application : public TRelation_application
shared_ptr<TPro_msk> _pro_mask;
bool _is_set_fpcheck;
int _last_date;
bool _f1_ini;
bool _f1_liq;
friend class TPro_msk;
static bool showpartite_handler(TMask_field& f, KEY k);
@ -220,6 +222,7 @@ protected: // TApplication
bool force_mask_swap(const TCausale& old_caus, const TCausale& new_caus);
protected: // TRelation_application
void check_f1_ini();
virtual bool user_create();
virtual bool user_destroy();
virtual bool changing_mask(int mode);

View File

@ -1,3 +1,3 @@
23
0
$mov|0|0|479|0|Movimenti di prima nota|NMOV||
$mov|96174|96174|559|0|Movimenti di prima nota|NMOV||

View File

@ -1,5 +1,5 @@
23
59
60
ANNOES|9|4|0|Codice esercizio
NUMREG|3|7|0|Numero di operazione
DATAREG|5|8|0|Data operazione
@ -59,6 +59,7 @@ CFBOLLADOG|1|7|0|Codice fornitore a cui
TFINVIO|7|1|0|Flag Invio Trasferimento Fatture
TFDATA|5|8|0|Data ultimo invio Trasferimento Fatture
IVALIQ|8|1|0|Iva per cassa liquidata completamente
KEYFPPRO|1|80|0|Chiavi dell'FPPRO [KEYPRGINVIO;KEYHEADERFATT;KEYBODYFATT]
4
NUMREG|
DATAREG+NUMREG|X

View File

@ -92,6 +92,11 @@ TString get_dataendreg()
return ini_get_string(FILE_CONFIG, FILE_SECTION, "dataendreg");
}
bool get_periodprec()
{
return ini_get_bool(CONFIG_DITTA, FILE_SECTION, "flag_periodprec");
}
void set_endatareg(bool enable)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, "endatareg", enable);
@ -107,6 +112,11 @@ void set_dataendreg(const TString& date)
ini_set_string(FILE_CONFIG, FILE_SECTION, "dataendreg", date);
}
void set_periodprec(bool flag)
{
ini_set_bool(CONFIG_DITTA, FILE_SECTION, "flag_periodprec", flag);
}
bool check_causale(const TString& cod_caus)
{
return check_causale(cod_caus, "FA") || check_causale(cod_caus, "NC");
@ -130,13 +140,13 @@ bool check_causale(const TString& cod_caus, const TString& tipo_doc)
return false;
}
void run_cont_ini()
void run_cont_ini(bool liq)
{
static TString run_string;
#ifdef DBG
run_string.cut(0) << "cg2 -0 -i" << F1_INIREGCONT << "*" << ".ini" << " /u" << user();
run_string.cut(0) << "cg2 -0 -i" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq? " -liq" : " ") << " /u" << user();
#else
run_string.cut(0) << "cg2 -0 -i" << TFilename().tempdir() << "\\" << F1_INIREGCONT << "*" << ".ini" << " /u" << user();
run_string.cut(0) << "cg2 -0 -i" << TFilename().tempdir() << "\\" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq ? " -liq" : " ") << " /u" << user();
#endif
TExternal_app(run_string).run();
}
@ -151,14 +161,7 @@ void TF1_log::log(int severity, const char* msg)
}
static TString txt;
txt.cut(0);
if (severity == LOG_MSG)
txt << "[message] : ";
else if(severity == LOG_WARN)
txt << "[warning] : ";
else if (severity == LOG_ERR)
txt << "[error] : ";
txt << msg;
txt.cut(0) << msg;
_log->log(severity, txt);
// Scrivo anche su file
std::filebuf fb;
@ -166,8 +169,8 @@ void TF1_log::log(int severity, const char* msg)
std::ostream os(&fb);
os << txt << std::endl;
fb.close();
}
bool TF1_log::show_log()
{
if (_log)

View File

@ -55,19 +55,23 @@ public:
bool show_log();
};
void set_ini_codcaus(const TString& codcaus, bool nc = false);
const char* get_ini_codcaus(bool nc = false);
const char* get_codcaus(const char * tipodoc, const char* codcf);
bool get_endatareg();
TString get_datainireg();
TString get_dataendreg();
bool get_periodprec();
void set_ini_codcaus(const TString& codcaus, bool nc = false);
void set_endatareg(bool enable);
void set_datainireg(const TString& date);
void set_dataendreg(const TString& date);
void set_periodprec(bool flag);
// Controlla se il "cod_caus" e' per Fatture d'acquisto o Note Credito d'Acquisto
bool check_causale(const TString& cod_caus);
// Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto)
bool check_causale(const TString& cod_caus, const TString& tipo_doc);
void run_cont_ini();
void run_cont_ini(bool liq);
#endif

View File

@ -14,6 +14,7 @@
#define FILTER_ASS "E"
#define FILTER_ALL "A"
#define FILTER_CONT "C"
#define PARA_FP "fp"
enum
{
@ -554,6 +555,7 @@ int TPassive_mask::prepara_contab() const
newf_ini << F1_INIREGCONT << num << ".ini";
#endif
TConfig contab_ini(newf_ini, "Transaction");
TString prokeys = row->get(sf.cid2index(S_PROKEY));
contab_ini.set("Action", "INSERT");
@ -565,7 +567,41 @@ int TPassive_mask::prepara_contab() const
contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC)));
contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7));
contab_ini.set("TOTDOC", abs(real(row->get(sf.cid2index(S_TOTDOC)))).string());
contab_ini.set("KEYFPPRO", row->get(sf.cid2index(S_PROKEY)));
contab_ini.set("KEYFPPRO", prokeys);
// Se ci sono le scadenze esporto anche quelle
TToken_string keys(prokeys, ';');
TString where_q;
where_q << "WHERE PO_KEYPRGINVIO = '" << keys.get() << "'";
where_q << " AND PO_KEYHEADERFATT = '" << keys.get() << "'";
where_q << " AND PO_KEYBODYFATT = '" << keys.get() << "'";
TString query; query << "SELECT PO_RIGA AS RIGA, PO_DATASCADENZA AS DATA, PO_IMPORTO AS IMPORTO \nFROM PAA2500F \n" << where_q;
fp_db().sq_set_exec(query,false);
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
const int riga = real(fp_db().sq_get("RIGA")).integer();
contab_ini.set_paragraph(LF_SCADENZE, riga); // Setto il paragrafo con riga scad
contab_ini.set("DATASCAD", fp_db().sq_get_date("DATA"));
contab_ini.set("IMPORTO", fp_db().sq_get("IMPORTO"));
contab_ini.set("NRATA", riga);
contab_ini.set("NRIGA", "1");
}
where_q.cut(0) << "WHERE PL_KEYPRGINVIO = '" << keys.get(0);
where_q << "' AND PL_KEYHEADERFATT = '" << keys.get();
where_q << "' AND PL_KEYBODYFATT = '" << keys.get() << "'";
query.cut(0) << "SELECT PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F \n" << where_q;
fp_db().sq_set_exec(query, false);
int i = 1;
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next(), i++)
{
contab_ini.set_paragraph(LF_RMOVIVA, i);
contab_ini.set("IMPONIBILE", fp_db().sq_get("IMPONIBILE"));
contab_ini.set("IMPOSTA", fp_db().sq_get("IMPOSTA"));
contab_ini.set("NRIGA", i);
}
row->add("", 0);
}
@ -585,7 +621,7 @@ void TPassive_mask::log_contab()
TFilename cg_ini;
TString msg;
TF1_log log;
std::vector<TString> doc_saved, doc_canceled;
std::vector<TString> doc_saved, doc_canceled, save_numreg, save_protiv;
FOR_EACH_SHEET_ROW(sfield(F_DOCS), n, row)
{
TString num; num.format("%04d", n);
@ -598,10 +634,17 @@ void TPassive_mask::log_contab()
{
TConfig config(cg_ini, "Transaction");
TString numdoc;
TString numreg;
TString protiv;
if (config.get("Result") == "OK")
{
numdoc = config.get("NUMDOC", "23");
numreg = config.get("NUMREG", "23");
protiv = config.get("PROTIVA", "23");
doc_saved.insert(doc_saved.end(), numdoc);
save_numreg.insert(save_numreg.end(), numreg);
save_protiv.insert(save_protiv.end(), protiv);
}
else if(config.get("Result") == "CANCEL")
{
@ -615,13 +658,15 @@ void TPassive_mask::log_contab()
if (elem_save > 0)
{
if (elem_save == 1)
msg << "Il documento n. '" << doc_saved[0] << "' e' stato registrato.";
msg << "Il documento n. '" << doc_saved[0] << "' e' stato registrato con numero movimento contabile '" << save_numreg[0] << "' e protocollo iva '" << save_protiv[0] << "'.";
else
msg << "Sono stati registrati " << elem_save << " documenti.";
if (elem_save > 1)
for (int i = 0; i < elem_save; i++)
msg << "\n - Documento n. '" << doc_saved[i] << "'";
log.log(LOG_MSG, msg);
msg << "\n - Documento n. '" << doc_saved[i] << "': movimento contabile '" << save_numreg[0] << "', protocollo iva '" << save_protiv[0] << "'";
TToken_string msg_tok(msg, '\n');
for(int i=0; i<msg_tok.items(); i++)
log.log(LOG_MSG, msg_tok.get());
}
if (elem_canc > 0)
{
@ -633,7 +678,9 @@ void TPassive_mask::log_contab()
if (elem_canc > 1)
for (int i = 0; i < elem_canc; i++)
msg << "\n - Documento n. '" << doc_canceled[i] << "'";
log.log(LOG_WARN, msg);
TToken_string msg_tok(msg, '\n');
for (int i = 0; i < msg_tok.items(); i++)
log.log(LOG_WARN, msg_tok.get());
}
if (elem_save > 0 || elem_canc > 0)
log.show_log();
@ -646,7 +693,8 @@ void TPassive_mask::contabilizza()
switch(stato)
{
case is_ready:
run_cont_ini(); // Eseguo gli ini
run_cont_ini(get_bool(F_PERIODPREC));
// Eseguo gli ini
log_contab(); // Mostro stato contabilizzate/annullate
clean_ini(F1_INIREGCONT);
fill(); // Ricarico sheet per togliere quelli contabilizzati
@ -906,6 +954,10 @@ bool TPassive_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (e == fe_init)
o.set(TDate(TODAY));
break;
case F_PERIODPREC:
if (e == fe_init)
o.set(get_periodprec()? "X" : "");
break;
default: break;
}
if (o.dlg() >= F_FORNOTASS && o.dlg() <= F_CONTABIL)
@ -996,8 +1048,9 @@ void TPassive_app::save_field(const TPassive_mask& mask)
{
set_ini_codcaus(mask.get(F_CAUSFA));
set_datainireg(mask.get(F_DATAINIREG));
set_periodprec(mask.get_bool(F_PERIODPREC));
}
ini_set_string(CONFIG_DITTA, "fp", "dataini_fp04", mask.get(F_DATAINI));
ini_set_string(CONFIG_DITTA, PARA_FP, "dataini_fp04", mask.get(F_DATAINI));
}
void TPassive_app::main_loop()

View File

@ -15,6 +15,7 @@
#define F_DESCAUSNC 515
#define F_GROUPCON 516
#define F_GROUPCAU 517
#define F_PERIODPREC 518
#define END_MASK 599

View File

@ -124,7 +124,7 @@ BEGIN
ITEM "Codice\nProtocol.@12"
END
GROUPBOX F_GROUPCAU 59 7
GROUPBOX F_GROUPCAU 59 8
BEGIN
PROMPT 31 10 "@BSelezionare Causale per Registrazione Contabile:"
END
@ -213,6 +213,11 @@ BEGIN
MODULE F1
END
BOOLEAN F_PERIODPREC
BEGIN
PROMPT 33 16 "Selezione automatica liquid. periodo precedente"
END
ENDPAGE
PAGE "Elenco Fatture" 0 2 0 0
@ -290,7 +295,6 @@ BEGIN
PICTURE TOOL_LINK
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""