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:
parent
9e562a7dd8
commit
a0fd9503b8
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
@ -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()
|
||||
|
@ -15,6 +15,7 @@
|
||||
#define F_DESCAUSNC 515
|
||||
#define F_GROUPCON 516
|
||||
#define F_GROUPCAU 517
|
||||
#define F_PERIODPREC 518
|
||||
#define END_MASK 599
|
||||
|
||||
|
||||
|
@ -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 ""
|
||||
|
Loading…
x
Reference in New Issue
Block a user