Simone Palacino 18659b8287 Patch level : 12.0 996
Files correlati     : tf0.exe fp0.exe fp0100a.msk fp0300a.msk tf0100a.msk tf0400a.msk
Commento            : Adeguamento nuovi codici fatturazione elettronica.
2020-09-17 17:09:13 +02:00

747 lines
23 KiB
C++
Raw Blame History

#include "tf0400a.h"
#include "tfutility.h"
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <recset.h>
#include <recarray.h> // cache()
#include "../fe/felib.h" // TAnagrafica
#include "modaut.h"
#include <cglib.h>
typedef enum{
def_sfield = F_RIGHE, // Sheetfield di default (tutte le colonne)
not_send_sfield = F_NOTSEND // Sheetfield di breve (poche colonne per non inviate)
} field;
/****************************************************************************************************
* TSpe_check_msk
****************************************************************************************************/
class TSpe_check_msk : public TAutomask
{
private:
TAnagrafica _ditta;
bool _selected;
TSheet_field& get_sfield(const int field);
void fill_ninvio();
void refresh();
void fill_no_filter();
void fill_diff();
void find_homeland(TToken_string& row, TString numreg, TString codiva, TRectype& clifo);
void fill_cust();
void get_fil_flag(TString& query, const char* table);
void enable_edit(bool en);
void select_all();
void save_all();
void delete_all();
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
public:
TSpe_check_msk();
virtual ~TSpe_check_msk() {};
};
bool TSpe_check_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch(o.dlg())
{
case DLG_RECALC:
if(e != fe_button) break;
refresh();
break;
case F_TIPOCONTROLLO:
if(e != fe_modify) break;
refresh();
break;
case DLG_ALL:
if(e != fe_button) break;
select_all();
break;
case DLG_SAVEREC:
save_all();
break;
case DLG_DELREC:
delete_all();
break;
case DLG_EDIT:
if(e == fe_button)
{
TSheet_field* sheet;
if(get_int(F_TIPOCONTROLLO) == 3)
sheet = &sfield(F_NOTSEND);
else
sheet = &sfield(F_RIGHE);
if(sheet->items() > 0)
{
sheet->esporta();
}
else
{
warning_box("Impossibile esportare una griglia vuota");
}
}
break;
case A_TIPOCF:
case A_CODCF:
case A_OCFPI:
{
if(e != fe_modify) break;
// Leggo dal clifo
TString tipocf, codcf, ocfpi;
tipocf = o.mask().get(A_TIPOCF);
codcf = o.mask().get(A_CODCF);
ocfpi = o.mask().get(A_OCFPI);
TRectype app = getCli(tipocf, codcf, ocfpi);
o.mask().set(A_RAGSOC, app.get("RAGSOC"));
o.mask().set(A_RFSO, app.get("CODRFSO"));
o.mask().set(A_RAGSOCRFSO, get_rfso(app.get("CODRFSO")));
o.mask().set(A_PAIV, app.get("PAIV"));
o.mask().set(A_COFI, app.get("COFI"));
// Abilito se il cliente <20> occasionale
o.mask().enable(A_OCFPI, app.get_bool("OCCAS"));
// Controllo autofattura
TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR");
TString piva = cache().get(LF_ANAG, key, "PAIV");
if(piva == app.get("PAIV"))
{
// Autofattura!
o.mask().set(A_AUTOFATT, "X");
}
}
break;
default:
break;
}
return true;
}
TSheet_field& TSpe_check_msk::get_sfield(const int field)
{
TSheet_field* wrong, *right;
if (field == def_sfield)
{
wrong = &sfield(not_send_sfield);
right = &sfield(def_sfield);
enable(F_FLAG);
}
else
{
wrong = &sfield(def_sfield);
right = &sfield(not_send_sfield);
disable(F_FLAG);
}
wrong->hide();
if(wrong->items() > 0)
wrong->destroy();
right->hide();
if (right->items() > 0)
right->destroy();
return *right;
}
void TSpe_check_msk::fill_ninvio()
{
TString query = "USE MOV\n";
query << R"(SELECT (23.REG!="")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=")" << get(F_TIPOCF) << "\")";
if (get(F_CODCF).full())
query << "&&STR((23.CODCF=#CODCF))";
TISAM_recordset rset(query);
TDate dadatareg = get_date(F_DATAINI);
if (!dadatareg.ok())
{
dadatareg = TDate(01, 01, 2017);
set(F_DATAINI, dadatareg);
}
TDate adatareg = get_date(F_DATAFIN);
if (!adatareg.ok())
{
adatareg = TDate(TODAY);
set(F_DATAFIN, adatareg);
}
// Setto le variabili
rset.set_var("#DADATAREG", dadatareg);
rset.set_var("#ADATAREG", adatareg);
if (get(F_CODCF).full())
rset.set_var("#CODCF", get(F_CODCF));
int nrec = rset.items();
TSheet_field& s = get_sfield(F_NOTSEND);
if (nrec <= 0) return;
for (bool ok = rset.move_first(); ok; ok = rset.move_next())
{
// Devo prendere tutti quelli che non vanno bene di records
TRectype clifo = getCli(rset.get("23.TIPO").as_string(), rset.get("23.CODCF").as_string(), rset.get("23.OCCAS").as_string());
if (rset.get("23.TFINVIO").as_string() != "I")
{
TToken_string& row = s.row(-1);
row.add(rset.get("23.NUMREG").as_int(), 0);
row.add(rset.get("23.DATAREG").as_date());
row.add(rset.get("23.ANNOES").as_int());
row.add(rset.get("23.NUMDOC").as_int());
row.add(rset.get("23.NUMDOCEXT").as_int());
row.add(rset.get("23.TIPODOC").as_string());
row.add(rset.get("23.DESCR").as_string());
row.add(rset.get("23.CODCF").as_int());
row.add(rset.get("23.TOTDOC").as_real());
row.add(rev_charge(rset.get("NUMREG").as_string(), rset.get("23.DATAREG").as_date().year())), s.cid2index(A_REVERSE);
row.add(rset.get("23.TFINVIO").as_string().empty()? "X" : rset.get("23.TFINVIO").as_string());
}
}
s.force_update();
s.show();
enable_edit(false);
}
void TSpe_check_msk::refresh()
{
switch(get_long(F_TIPOCONTROLLO))
{
case 0:
fill_no_filter();
break;
case 1:
fill_diff();
break;
case 2:
fill_cust();
case 3:
fill_ninvio();
default:
break;
}
return;
}
void TSpe_check_msk::fill_no_filter()
{
TString query = "USE RMOVIVA\n";
query << R"(SELECT (23.REG!="")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=")" << get(F_TIPOCF) << "\")";
if(get(F_CODCF).full())
query << "&&STR((23.CODCF=#CODCF))";
get_fil_flag(query, "23");
query << "\nJOIN MOV INTO NUMREG==NUMREG\n";
TISAM_recordset rset(query);
TDate dadatareg = get_date(F_DATAINI);
if(!dadatareg.ok())
{
dadatareg = TDate(01, 01, 2017);
set(F_DATAINI, dadatareg);
}
TDate adatareg = get_date(F_DATAFIN);
if(!adatareg.ok())
{
adatareg = TDate(TODAY);
set(F_DATAFIN, adatareg);
}
// Setto le variabili
rset.set_var("#DADATAREG", dadatareg);
rset.set_var("#ADATAREG", adatareg);
if(get(F_CODCF).full())
rset.set_var("#CODCF", get(F_CODCF));
const int nrec = rset.items();
TSheet_field& s = get_sfield(F_RIGHE);
if(nrec <= 0) return;
for(bool ok = rset.move_first(); ok; ok = rset.move_next())
{
// Devo prendere tutti quelli che non vanno bene di records
if (check_record(&rset, false)) continue;
TRectype clifo = getCli(rset.get("23.TIPO").as_string(), rset.get("23.CODCF").as_string(), rset.get("23.OCCAS").as_string());
TToken_string& row = s.row(-1);
row.add(rset.get("23.DATAREG").as_string(), s.cid2index(A_DATAREG));
row.add(rset.get("23.TIPODOC").as_string(), s.cid2index(A_TIPODOC));
row.add(rset.get("23.NUMDOC").as_string(), s.cid2index(A_NUMDOC));
row.add(rset.get("23.DATADOC").as_string(), s.cid2index(A_DATADOC));
row.add(rset.get("25.CODIVA").as_string(), s.cid2index(A_ALIQUOTA));
row.add(rset.get("25.IMPONIBILE").as_string(), s.cid2index(A_IMPONIBILE));
row.add(rset.get("25.IMPOSTA").as_string(), s.cid2index(A_IMPOSTA));
// NATURA
row.add(natura(rset.get("25.CODIVA").as_string()), s.cid2index(A_NATURA));
// DETR
row.add(find_detraib(rset.get("25.TIPODET").as_string()), s.cid2index(A_DETRAIB));
row.add(rset.get("23.TIPO").as_string(), s.cid2index(A_TIPOCF));
row.add(rset.get("23.CODCF").as_string(), s.cid2index(A_CODCF));
row.add(rset.get("23.OCCAS").as_string(), s.cid2index(A_OCFPI));
// RSOC
row.add(clifo.get("RAGSOC"), s.cid2index(A_RAGSOC));
// RFSO
row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO));
// RSOC RFSO
row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO));
// RC
row.add((rev_charge(rset.get("NUMREG").as_string(), rset.get("23.DATAREG").as_date().year())), s.cid2index(A_REVERSE));
// AUTOFATT
if(_ditta.partita_IVA() == clifo.get("PAIV"))
{
row.add("X", s.cid2index(A_AUTOFATT));
row.add(_ditta.partita_IVA(), s.cid2index(A_PAIV));
row.add(_ditta.codice_fiscale(), s.cid2index(A_COFI));
}
else
{
row.add("", s.cid2index(A_AUTOFATT)); // AutoFatt
row.add(clifo.get("PAIV"), s.cid2index(A_PAIV)); // P.IVA
row.add(clifo.get("COFI"), s.cid2index(A_COFI)); // Codice Fiscale
}
row.add(rset.get("23.TFINVIO").as_bool() ? "X" : "", s.cid2index(A_SPEDITA));
row.add(rset.get("23.NUMREG").as_string(), s.cid2index(A_NUMERO));
}
s.force_update();
s.show();
enable_edit(false);
}
void TSpe_check_msk::fill_diff()
{
// Apro la tabella TRASFATT e per ogni record lo ricostruisco l'originale
TString query = "USE TRASFATT\n";
query << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&NUMREG<" << MOV_CUSTOM << "&&(TIPO=\"" << get(F_TIPOCF) << "\")";
if(get(F_CODCF).full())
query << "&&STR((CODCF=#CODCF))";
get_fil_flag(query, "173");
TISAM_recordset rset(query);
TDate dadatareg = get_date(F_DATAINI);
if(!dadatareg.ok())
{
dadatareg = TDate(01, 01, 2017);
set(F_DATAINI, dadatareg);
}
TDate adatareg = get_date(F_DATAFIN);
if(!adatareg.ok())
{
adatareg = TDate(TODAY);
set(F_DATAFIN, adatareg);
}
// Setto le variabili
rset.set_var("#DADATAREG", dadatareg);
rset.set_var("#ADATAREG", adatareg);
if(get(F_CODCF).full())
rset.set_var("#CODCF", get(F_CODCF));
int nrec = rset.items();
TSheet_field& s = get_sfield(F_RIGHE);
TString nat;
for(bool ok = rset.move_first(); ok; ok = rset.move_next())
{
TRectype clifo = getCli(rset.get("TIPO").as_string(), rset.get("CODCF").as_string(), rset.get("OCCAS").as_string());
// Creo la riga della prima nota
TToken_string& orig = s.row(-1);
find_homeland(orig, rset.get("NUMREG").as_string(), rset.get("CODIVA").as_string(), clifo);
TToken_string& row = s.row(-1);
row.add(rset.get("DATAREG").as_string(), s.cid2index(A_DATAREG));
row.add(rset.get("TIPODOC").as_string(), s.cid2index(A_TIPODOC));
row.add(rset.get("TIPODOCAE").as_string(), s.cid2index(A_TIPODOCAE));
row.add(rset.get("NUMDOC").as_string(), s.cid2index(A_NUMDOC));
row.add(rset.get("DATADOC").as_string(), s.cid2index(A_DATADOC));
row.add(rset.get("CODIVA").as_string(), s.cid2index(A_ALIQUOTA));
row.add(rset.get("IMPONIBILE").as_string(), s.cid2index(A_IMPONIBILE));
row.add(rset.get("IMPOSTA").as_string(), s.cid2index(A_IMPOSTA));
// NATURA
nat.cut(0) << rset.get("NATURA").as_string();
row.add(nat.full() ? nat : natura(rset.get("CODIVA").as_string()), s.cid2index(A_NATURA));
// DETR
row.add(find_detraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB));
row.add(rset.get("TIPO").as_string(), s.cid2index(A_TIPOCF));
row.add(rset.get("CODCF").as_string(), s.cid2index(A_CODCF));
row.add(rset.get("OCCAS").as_string(), s.cid2index(A_OCFPI));
// RSOC
row.add(clifo.get("RAGSOC"), s.cid2index(A_RAGSOC));
// RFSO
row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO));
// RSOC RFSO
row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO));
// RC
row.add((rev_charge(rset.get("NUMREG").as_string(), rset.get("DATAREG").as_date().year())), s.cid2index(A_REVERSE));
// AUTOFATT
if(rset.get("AUTOFATT").as_string() == "X" || _ditta.partita_IVA() == clifo.get("PAIV"))
{
row.add("X", s.cid2index(A_AUTOFATT));
row.add(_ditta.partita_IVA() , s.cid2index(A_PAIV));
row.add(_ditta.codice_fiscale(), s.cid2index(A_COFI));
}
else
{
row.add("", s.cid2index(A_AUTOFATT)); // AutoFatt
row.add(clifo.get("PAIV"), s.cid2index(A_PAIV)); // P.IVA
row.add(clifo.get("COFI"), s.cid2index(A_COFI)); // Codice Fiscale
}
row.add(rset.get("TFINVIO").as_bool() ? "X" : "", s.cid2index(A_SPEDITA));
row.add(rset.get("NUMREG").as_string(), s.cid2index(A_NUMERO));
}
// Disabilito le colonne originali
for(int i = 0; i < s.items(); i+= 2)
{
s.disable_row(i);
}
s.force_update();
s.show();
enable_edit(true);
}
void TSpe_check_msk::find_homeland(TToken_string& row, TString numreg, TString codiva, TRectype& clifo)
{
TSheet_field& s = sfield(F_RIGHE);
static TLocalisamfile mov(LF_MOV), rmov(LF_RMOVIVA);
TRectype rec_mov(LF_MOV);
TRectype rec_rmov(LF_RMOVIVA);
rec_mov.put("NUMREG", numreg);
rec_rmov.put("NUMREG", numreg);
mov.read(rec_mov);
rmov.read(rec_rmov);
real imponibile = ZERO, imposta = ZERO;
while(!rmov.eof())
{
// Mi sposto se il codice IVA non <20> quello che mi serve
while(rec_rmov.get("NUMREG") == numreg && rec_rmov.get("CODIVA") != codiva)
{
++rmov;
rec_rmov = rmov.curr();
}
if(rec_rmov.get("NUMREG") != numreg) break;
imponibile += rec_rmov.get_real("IMPONIBILE");
imposta += rec_rmov.get_real("IMPOSTA");
// Mi sposto
++rmov;
rec_rmov = rmov.curr();
}
// Torno sul record per prendere i dati che mi mancano
--rmov; rec_rmov = rmov.curr();
row.add(rec_mov.get("DATAREG"), s.cid2index(A_DATAREG));
row.add(rec_mov.get("TIPODOC"), s.cid2index(A_TIPODOC));
row.add(rec_mov.get("NUMDOC"), s.cid2index(A_NUMDOC));
row.add(rec_mov.get("DATADOC"), s.cid2index(A_DATADOC));
row.add(rec_rmov.get("CODIVA"), s.cid2index(A_ALIQUOTA));
row.add(imponibile, s.cid2index(A_IMPONIBILE));
row.add(imposta, s.cid2index(A_IMPOSTA));
// NATURA
row.add(natura(rec_rmov.get("CODIVA")), s.cid2index(A_NATURA));
// DETR
row.add(find_detraib(rec_rmov.get("TIPODET")), s.cid2index(A_DETRAIB));
row.add(rec_mov.get("TIPO"), s.cid2index(A_TIPOCF));
row.add(rec_mov.get("CODCF"), s.cid2index(A_CODCF));
row.add(rec_mov.get("OCFPI"), s.cid2index(A_OCFPI));
// RSOC
row.add(clifo.get("RAGSOC"), s.cid2index(A_RAGSOC));
// RFSO
row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO));
// RSOC RFSO
row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO));
// RC
row.add((rev_charge(rec_mov.get("NUMREG"), rec_mov.get_date("DATAREG").year())), s.cid2index(A_REVERSE));
// AUTOFATT
if(_ditta.partita_IVA() == clifo.get("PAIV"))
{
row.add("X", s.cid2index(A_AUTOFATT));
row.add(_ditta.partita_IVA() , s.cid2index(A_PAIV));
row.add(_ditta.codice_fiscale(), s.cid2index(A_COFI));
}
else
{
row.add("", s.cid2index(A_AUTOFATT)); // AutoFatt
row.add(clifo.get("PAIV"), s.cid2index(A_PAIV)); // P.IVA
row.add(clifo.get("COFI"), s.cid2index(A_COFI)); // Codice Fiscale
}
row.add(rec_mov.get_bool("TFINVIO") ? "X" : "", s.cid2index(A_SPEDITA));
row.add(rec_mov.get("NUMREG"), s.cid2index(A_NUMERO));
}
void TSpe_check_msk::fill_cust()
{
TString query = "USE TRASFATT\n";
query << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << get(F_TIPOCF) << "\")";
if(get(F_CODCF).full())
query << "&&STR((CODCF=#CODCF))";
get_fil_flag(query, "173");
TISAM_recordset rset(query);
TDate dadatareg = get_date(F_DATAINI);
if(!dadatareg.ok())
{
dadatareg = TDate(01, 01, 2017);
set(F_DATAINI, dadatareg);
}
TDate adatareg = get_date(F_DATAFIN);
if(!adatareg.ok())
{
adatareg = TDate(TODAY);
set(F_DATAFIN, adatareg);
}
// Setto le variabili
rset.set_var("#DADATAREG", dadatareg);
rset.set_var("#ADATAREG", adatareg);
if(get(F_CODCF).full())
rset.set_var("#CODCF", get(F_CODCF));
int nrec = rset.items();
TSheet_field& s = sfield(F_RIGHE);
if(s.items() > 0)
s.destroy();
if(nrec <= 0) return;
// Nascondo lo sheet
s.hide();
TString nat;
for(bool ok = rset.move_first(); ok; ok = rset.move_next())
{
TRectype clifo = getCli(rset.get("TIPO").as_string(), rset.get("CODCF").as_string(), rset.get("OCCAS").as_string());
TToken_string& row = s.row(-1);
row.add(rset.get("DATAREG").as_string(), s.cid2index(A_DATAREG));
row.add(rset.get("TIPODOC").as_string(), s.cid2index(A_TIPODOC));
row.add(rset.get("NUMDOC").as_string(), s.cid2index(A_NUMDOC));
row.add(rset.get("DATADOC").as_string(), s.cid2index(A_DATADOC));
row.add(rset.get("CODIVA").as_string(), s.cid2index(A_ALIQUOTA));
row.add(rset.get("IMPONIBILE").as_string(), s.cid2index(A_IMPONIBILE));
row.add(rset.get("IMPOSTA").as_string(), s.cid2index(A_IMPOSTA));
// NATURA
nat.cut(0) << rset.get("NATURA").as_string();
row.add(nat.full() ? nat : natura(rset.get("CODIVA").as_string()), s.cid2index(A_NATURA));
// DETR
row.add(find_detraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB));
row.add(rset.get("TIPO").as_string(), s.cid2index(A_TIPOCF));
row.add(rset.get("CODCF").as_string(), s.cid2index(A_CODCF));
row.add(rset.get("OCCAS").as_string(), s.cid2index(A_OCFPI));
// RSOC
row.add(clifo.get("RAGSOC"), s.cid2index(A_RAGSOC));
// RFSO
row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO));
// RSOC RFSO
row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO));
// RC
row.add((rev_charge(rset.get("NUMREG").as_string(), rset.get("DATAREG").as_date().year())), s.cid2index(A_REVERSE));
// AUTOFATT
if(rset.get("AUTOFATT").as_string() == "X" || _ditta.partita_IVA() == clifo.get("PAIV"))
{
row.add("X", s.cid2index(A_AUTOFATT));
row.add(_ditta.partita_IVA() , s.cid2index(A_PAIV));
row.add(_ditta.codice_fiscale(), s.cid2index(A_COFI));
}
else
{
row.add("", s.cid2index(A_AUTOFATT)); // AutoFatt
row.add(clifo.get("PAIV"), s.cid2index(A_PAIV)); // P.IVA
row.add(clifo.get("COFI"), s.cid2index(A_COFI)); // Codice Fiscale
}
row.add(rset.get("TFINVIO").as_bool() ? "X" : "", s.cid2index(A_SPEDITA));
row.add(rset.get("NUMREG").as_string(), s.cid2index(A_NUMERO));
}
s.force_update();
s.show();
enable_edit(true);
}
void TSpe_check_msk::get_fil_flag(TString& query, const char* table)
{
switch(get_int(F_FLAG))
{
case 1:
query << "&&((" << table << ".TFINVIO=\"\")||("<< table << ".TFINVIO=\"X\")||(" << table << ".TFINVIO=\"F\")||(" << table << ".TFINVIO=\"E\"))";
break;
case 2:
query << "&&(" << table << ".TFINVIO=\"I\")";
break;
case 3:
query << "&&(" << table << ".TFINVIO=\"N\")";
case 0:
default:
break;
}
}
void TSpe_check_msk::enable_edit(const bool en)
{
// Abilito i bottoni
enable(DLG_ALL,en);
enable(DLG_SAVEREC,en);
enable(DLG_DELREC, en);
TSheet_field& s = sfield(F_RIGHE);
// Abilito/Disabilito le colonne
s.enable_column(s.cid2index(A_ELIMINA), en);
s.enable_column(s.cid2index(A_DATAREG),en);
s.enable_column(s.cid2index(A_NUMDOC),en);
s.enable_column(s.cid2index(A_DATADOC),en);
s.enable_column(s.cid2index(A_ALIQUOTA),en);
s.enable_column(s.cid2index(A_IMPONIBILE),en);
s.enable_column(s.cid2index(A_IMPOSTA),en);
s.enable_column(s.cid2index(A_NATURA),en);
s.enable_column(s.cid2index(A_TIPOCF),en);
s.enable_column(s.cid2index(A_CODCF),en);
// Abilito/Disabilito le righe dei ocfpi corretti
if(en)
{
FOR_EACH_SHEET_ROW(s, r, strarr)
{
static TString app;
strarr->get(s.cid2index(A_OCFPI), app);
if(app.blank())
s.disable_cell(r, s.cid2index(A_OCFPI));
else
s.enable_cell(r, s.cid2index(A_OCFPI));
}
}
// Altrimenti disabilito tutto
else
{
s.enable_column(s.cid2index(A_OCFPI), en);
}
s.force_update();
}
void TSpe_check_msk::select_all()
{
_selected = !_selected;
TSheet_field& s = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(s, r, strarr)
{
// Salto tutte le righe provenienti dalla prima nota
if(get_long(F_TIPOCONTROLLO) == 1 && r % 2 == 0) continue;
strarr->add(_selected ? "X" : "", s.cid2index(A_ELIMINA));
}
s.force_update();
}
void TSpe_check_msk::save_all()
{
TSheet_field& s = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(s, r, strarr)
{
// Salto tutte le righe provenienti dalla prima nota
if(get_long(F_TIPOCONTROLLO) == 1 && r % 2 == 0) continue;
/* Salvo il record modificato in TFCustom */
static TLocalisamfile trasfatt(LF_TRASFATT);
TString key = strarr->get(s.cid2index(A_NUMERO)); key << "|"<< strarr->get(s.cid2index(A_ALIQUOTA));
TRectype r_cust = cache().get(LF_TRASFATT, key);
r_cust.put("TIPO", strarr->get(s.cid2index(A_TIPOCF)));
r_cust.put("CODCF", strarr->get(s.cid2index(A_CODCF)));
r_cust.put("OCCAS", strarr->get(s.cid2index(A_OCFPI)));
r_cust.put("TIPODOC", strarr->get(s.cid2index(A_TIPODOC)));
r_cust.put("NUMDOC", strarr->get(s.cid2index(A_NUMDOC)));
r_cust.put("DATAREG", strarr->get(s.cid2index(A_DATAREG)));
r_cust.put("DATADOC", strarr->get(s.cid2index(A_DATADOC)));
r_cust.put("IMPONIBILE", strarr->get(s.cid2index(A_IMPONIBILE)));
r_cust.put("IMPOSTA", strarr->get(s.cid2index(A_IMPOSTA)));
r_cust.put("CODIVA", strarr->get(s.cid2index(A_ALIQUOTA)));
r_cust.put("NATURA", strarr->get(s.cid2index(A_NATURA)));
r_cust.put("AUTOFATT", strarr->get(s.cid2index(A_AUTOFATT)));
if(r_cust.rewrite(trasfatt) != NOERR)
{
error_box("Errore durante il salvataggio del movimento n.: %s, cod alq: %s", strarr->get(s.cid2index(A_NUMERO)) ,strarr->get(s.cid2index(A_ALIQUOTA)));
return;
}
}
}
void TSpe_check_msk::delete_all()
{
TSheet_field& s = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(s, r, strarr)
{
// Salto tutte le righe non selezionate e/o provenienti dalla prima nota
bool first = strcmp(strarr->get(s.cid2index(A_ELIMINA)), "X") != 0;
bool second = (get_long(F_TIPOCONTROLLO) == 1 && r % 2 == 0);
if(strcmp(strarr->get(s.cid2index(A_ELIMINA)), "X") != 0 || (get_long(F_TIPOCONTROLLO) == 1 && r % 2 == 0)) continue;
static TLocalisamfile trasfatt(LF_TRASFATT);
static TRectype r_cust(LF_TRASFATT);
r_cust.put("NUMREG", strarr->get(s.cid2index(A_NUMERO)));
r_cust.put("CODIVA", strarr->get(s.cid2index(A_ALIQUOTA)));
if(r_cust.remove(trasfatt) != NOERR)
{
error_box("Errore durante l'eliminazione del movimento n.: %s, cod alq: %s", strarr->get(s.cid2index(A_NUMERO)) ,strarr->get(s.cid2index(A_ALIQUOTA)));
return;
}
}
}
TSpe_check_msk::TSpe_check_msk() : TAutomask("tf0400a")
{
sfield(F_NOTSEND).hide();
_ditta.init(LF_NDITTE, prefix().get_codditta());
_selected = false;
}
/****************************************************************************************************
* TSpeCheck_app
****************************************************************************************************/
class TSpeCheck_app : public TSkeleton_application
{
public:
void main_loop() override;
};
TSpeCheck_app& app() { return dynamic_cast<TSpeCheck_app&>(main_app()); }
void TSpeCheck_app::main_loop()
{
TSpe_check_msk msk;
msk.run();
}
int tf0400(int argc, char* argv[])
{
TSpeCheck_app app;
app.run(argc, argv, TR("Controlli Trasferimento fatture"));
return 0;
}