Files correlati : tf Commento : - Tolto controllo fornitore bolla doganale - Sistemati filtri maschera spesometro - Invertito ordine "Sogg. Fatt. Elettr" e Esteri in fornitori (era diverso rispetto ai clienti) - Refactor dei nomi generale
351 lines
10 KiB
C++
351 lines
10 KiB
C++
#include "tf0500a.h"
|
||
|
||
#include <applicat.h>
|
||
#include <automask.h>
|
||
#include <config.h>
|
||
#include <progind.h>
|
||
#include <recarray.h> // cache()
|
||
#include <textset.h> // TCSV_recordset
|
||
#include <golem.h> // goto_url()
|
||
#include <utility.h> // get_iva_sirio()
|
||
|
||
#define TIPO_FILE "DF"
|
||
#define TFBASE "ModuliSirio"
|
||
|
||
#define CODICE_FORNITURA "IVP"
|
||
|
||
class TIva_send_msk : public TAutomask
|
||
{
|
||
bool _mese;
|
||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
public:
|
||
bool check_variables();
|
||
bool is_mese() const { return _mese; }
|
||
TIva_send_msk() : TAutomask("tf0500a"){}
|
||
};
|
||
|
||
// Definizione per chiamare metodo send dalla maschera
|
||
class TIva_send_app : public TSkeleton_application
|
||
{
|
||
void generate_n_send(TIva_send_msk& msk) { generate(msk) && send(); }
|
||
bool generate(TIva_send_msk& msk);
|
||
TToken_string get_testata(TIva_send_msk& msk);
|
||
public:
|
||
bool send();
|
||
virtual void main_loop();
|
||
};
|
||
|
||
TIva_send_app& app() { return (TIva_send_app&)main_app(); }
|
||
|
||
const TRectype get_anag_ditta()
|
||
{
|
||
TString codanagr = cache().get(LF_NDITTE, prefix().firm().codice(), "TIPOA");
|
||
codanagr << "|" << cache().get(LF_NDITTE, prefix().firm().codice(), "CODANAGR");
|
||
return cache().get(LF_ANAG, codanagr);
|
||
}
|
||
|
||
// Ritorna il record richiesto di tabcom.LIM
|
||
const TRectype get_lim(int anno, int mese)
|
||
{
|
||
TString key; key << anno;
|
||
if(mese < 10)
|
||
key << "0" << mese;
|
||
else
|
||
key << mese;
|
||
return cache().get("LIM", key);
|
||
}
|
||
|
||
// Ritorna il record richiesto di ivaliq
|
||
const TRectype get_liq(int anno, int mese)
|
||
{
|
||
TString key; key << anno << "|";
|
||
if(mese < 10)
|
||
key << "0";
|
||
key << mese << "|U";
|
||
return cache().get(LF_IVALIQ, key);
|
||
}
|
||
|
||
// Ritorna il record richiesto di tabcom.LIA
|
||
const TRectype get_lia(int anno)
|
||
{
|
||
TString key; key << format("%05d", prefix().firm().codice()) << anno; // %05d Crea un numero di 5 cifre partendo dal codice e mettendoci 0 davanti
|
||
return cache().get("%LIA", key);
|
||
}
|
||
|
||
TString format_currency(const TString& value)
|
||
{
|
||
const real app(value);
|
||
if(app == ZERO)
|
||
return ",00";
|
||
else
|
||
return TCurrency(app).string();
|
||
}
|
||
|
||
bool TIva_send_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch(o.dlg())
|
||
{
|
||
case F_PATH:
|
||
if(e == fe_init)
|
||
{
|
||
set(F_PATH, ini_get_string(CONFIG_STUDIO, "tf", "path_invio"));
|
||
}
|
||
case F_ANNO:
|
||
if(e == fe_modify)
|
||
{
|
||
TString cod = get(F_CODDITTA); cod << get_int(F_ANNO);
|
||
if(cache().get("%LIA", cod).empty())
|
||
{
|
||
warning_box("Attenzione anno di liquidazione non presente");
|
||
set(F_ANNO, "");
|
||
break;
|
||
}
|
||
if(cache().get("%LIA", cod, "S7") == "M")
|
||
{
|
||
_mese = true;
|
||
enable(F_DAMESE);
|
||
enable(F_AMESE);
|
||
disable(F_DATRIMESTRE);
|
||
disable(F_ATRIMESTRE);
|
||
}
|
||
else
|
||
{
|
||
_mese = false;
|
||
disable(F_DAMESE);
|
||
disable(F_AMESE);
|
||
enable(F_DATRIMESTRE);
|
||
enable(F_ATRIMESTRE);
|
||
}
|
||
}
|
||
else if(e == fe_init)
|
||
{
|
||
// Per trovare un valore tento per 5 anni di vedere se c'<27> una liquidazione aperta, cos<6F> da valorizzare tutta la roba
|
||
int year = TDate(TODAY).year();
|
||
for(int i = year; i >= year - 5; i--)
|
||
{
|
||
TString cod = get(F_CODDITTA);
|
||
cod << i;
|
||
if(cache().get("%LIA", cod).empty()) continue;
|
||
if(cache().get("%LIA", cod, "S7") == "M")
|
||
{
|
||
set(F_ANNO, i);
|
||
_mese = true;
|
||
enable(F_DAMESE);
|
||
enable(F_AMESE);
|
||
disable(F_DATRIMESTRE);
|
||
disable(F_ATRIMESTRE);
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
set(F_ANNO, i);
|
||
_mese = false;
|
||
disable(F_DAMESE);
|
||
disable(F_AMESE);
|
||
enable(F_DATRIMESTRE);
|
||
enable(F_ATRIMESTRE);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case F_DAMESE:
|
||
if(e == fe_modify)
|
||
set(F_AMESE, get_int(F_DAMESE)+2);
|
||
break;
|
||
case F_DATRIMESTRE:
|
||
if(e == fe_modify)
|
||
set(F_ATRIMESTRE, get_int(F_DATRIMESTRE));
|
||
break;
|
||
case DLG_EMAIL:
|
||
if(e == fe_button)
|
||
app().send();
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool TIva_send_msk::check_variables()
|
||
{
|
||
if(get(F_ANNO).empty())
|
||
{
|
||
error_box("Inserire un anno di liquidazione");
|
||
return false;
|
||
}
|
||
if((_mese && get(F_DAMESE).empty() && get(F_AMESE).empty()) || (!_mese && get(F_DATRIMESTRE).empty() && get(F_ATRIMESTRE).empty()))
|
||
{
|
||
error_box("Inserisci un periodo");
|
||
return false;
|
||
}
|
||
if((_mese && (get_int(F_DAMESE) > get_int(F_AMESE))) || (!_mese &&(get_int(F_DATRIMESTRE) > get_int(F_ATRIMESTRE))))
|
||
{
|
||
error_box("Date immesse non corrette");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool TIva_send_app::generate(TIva_send_msk& msk)
|
||
{
|
||
if(!msk.check_variables())
|
||
return false;
|
||
ofstream file;
|
||
TFilename path(msk.get(F_PATH));
|
||
|
||
TRectype row_lia = get_lia(msk.get_int(F_ANNO));
|
||
|
||
// Decido di utilizzare I10 come numero progressivo di trasmissione
|
||
int prog = row_lia.get_int("I14");
|
||
if(prog == 0)
|
||
{
|
||
prog = get_lia(msk.get_int(F_ANNO) - 1).get_int("I14");
|
||
}
|
||
prog++;
|
||
|
||
TString nome_file; nome_file << "IT" << get_anag_ditta().get("PAIV") << TIPO_FILE << prog << ".csv";
|
||
|
||
path.add(nome_file);
|
||
file.open(path, ios::out);
|
||
|
||
if(!file.is_open())
|
||
error_box(TR("Impossibile aprire il file alla posizione %s"), path);
|
||
else
|
||
ini_set_string(CONFIG_STUDIO, "tf", "path_invio", msk.get(F_PATH));
|
||
|
||
const TToken_string testata(get_testata(msk));
|
||
|
||
int start = msk.is_mese() ? msk.get_int(F_DAMESE) : (((msk.get_int(F_DATRIMESTRE)) * 3));
|
||
const int end = msk.is_mese() ? msk.get_int(F_AMESE) : (((msk.get_int(F_ATRIMESTRE)) * 3));
|
||
for(; start <= end; start++)
|
||
{
|
||
TRectype row_lim = get_lim(msk.get_int(F_ANNO), start); // row_lim viene gi<67> usata sopra
|
||
TRectype row_liq = get_liq(msk.get_int(F_ANNO), start);
|
||
|
||
TToken_string riga(testata);
|
||
if(msk.is_mese())
|
||
{
|
||
riga.add(start); // Mese
|
||
riga.add(""); // Trimestre
|
||
}
|
||
else
|
||
{
|
||
riga.add(""); // Mese
|
||
riga.add(row_liq.get_int("TRIMESTRE") == 4 ? "5" : row_liq.get("TRIMESTRE")); // Trimestre
|
||
}
|
||
|
||
const char subfor = row_liq.get_bool("SUBFOR") ? 'X' : '\0';
|
||
riga.add(subfor); // Flag Subfornitura
|
||
riga.add(""); // Eventi eccezionali
|
||
riga.add(format_currency(row_liq.get("TOTOPATT"))); // Totale operazioni attive (al netto dell'IVA)
|
||
riga.add(format_currency(row_liq.get("TOTOPPAS"))); // Totale operazioni passive (al netto dell'IVA)
|
||
riga.add(format_currency(row_liq.get("IVAES"))); // IVA esigibile
|
||
riga.add(format_currency(row_liq.get("IVADET"))); // IVA detratta
|
||
riga.add(format_currency(row_liq.get("IVADOV"))); // IVA dovuta
|
||
riga.add(format_currency(row_liq.get("IVADOVC"))); // IVA a credito VP6 col 2
|
||
riga.add(format_currency(row_liq.get("DEBPREC"))); // Debito periodo precedente
|
||
riga.add(format_currency(row_liq.get("CREPREC"))); // Credito periodo precedente
|
||
riga.add(format_currency(row_liq.get("CREAPREC"))); // Credito anno precedente
|
||
riga.add(format_currency(row_liq.get("VEAUE"))); // Versamenti auto UE
|
||
riga.add(format_currency(row_liq.get("CREIMP"))); // Crediti di imposta
|
||
riga.add(format_currency(row_liq.get("INTLIQTRI"))); // Interessi dovuti per liquidazioni trimestrali
|
||
riga.add(format_currency(row_liq.get("ACCDOV"))); // Acconto dovuto
|
||
riga.add(format_currency(row_liq.get("IVAVER"))); // IVA da versare
|
||
riga.add(format_currency(row_liq.get("IVAVERC"))); // IVA a credito VP14 col 2
|
||
riga.add(prog); // Numero interno trasmissione
|
||
riga.add(""); // Flag trasmesso
|
||
riga.add(""); // Flag accettato
|
||
|
||
// Appendo al file
|
||
file << riga << "\n";
|
||
}
|
||
file.close();
|
||
// Aggiorno l'univoco
|
||
|
||
row_lia.put("I14", prog);
|
||
if(row_lia.rewrite(TLocalisamfile(LF_TABCOM)) != NOERR)
|
||
{
|
||
error_box("Errore aggiornamento progressivo");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
TToken_string TIva_send_app::get_testata(TIva_send_msk& msk)
|
||
{
|
||
TToken_string testata; // Token string di virgole
|
||
TString cod_forn = CODICE_FORNITURA; cod_forn << msk.get(F_ANNO).right(2);
|
||
testata.add(cod_forn); // Codice Fornitura
|
||
testata.add(""); // Cod.Fisc. Sost. Dich.
|
||
testata.add(""); // Cod. Carica Sost. Dich.
|
||
testata.add(msk.get_int(F_ANNO)); // Anno comunicazione
|
||
testata.add(""); // Mese comunicazione
|
||
|
||
TRectype ana_ditta = get_anag_ditta();
|
||
|
||
testata.add(ana_ditta.get("COFI")); // Codice fiscale
|
||
testata.add(ana_ditta.get("PAIV")); // Partita IVA
|
||
testata.add(""); // P.IVA Controllante
|
||
testata.add(""); // Flag Liq. gruppo
|
||
testata.add(""); // Flag firma comunicazione
|
||
|
||
const int codice_carica = atoi(prefix().firm().get("CARRAPP"));
|
||
if(codice_carica > 0)
|
||
{
|
||
TString key = "F|"; key << prefix().firm().get("RAPPR");
|
||
const TString cod_fisc = cache().get(LF_ANAG, key, "COFI");
|
||
testata.add(cod_fisc); // Cod.Fisc. Dichiarante
|
||
testata.add(codice_carica); // Cod.Carica Dichiarante
|
||
}
|
||
else
|
||
{
|
||
testata.add(""); // Cod.Fisc. Dichiarante
|
||
testata.add(""); // Cod.Carica Dichiarante
|
||
}
|
||
testata.add(""); // Cod.Fisc. Soc. Dichiarante
|
||
testata.add(""); // Cod.Fisc. Intermediario
|
||
testata.add(""); // Flag Impegno
|
||
testata.add(""); // Data Impegno
|
||
testata.add(""); // Flag Firma Intermediario
|
||
testata.add(""); // Flag Conferma
|
||
testata.add(get_iva_sirio());
|
||
// Ricorda! Il programma di Leo vuole true = 'S', false = '' !
|
||
return testata;
|
||
}
|
||
|
||
bool TIva_send_app::send()
|
||
{
|
||
TFilename tmp = TFBASE"\\ModuliSirio.jar";
|
||
tmp.make_absolute_path();
|
||
|
||
DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir);
|
||
DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir);
|
||
xvt_fsys_set_dir(&new_dir);
|
||
const bool good = goto_url(tmp);
|
||
if (good)
|
||
{
|
||
xvt_sys_sleep(3000);
|
||
}
|
||
else
|
||
{
|
||
error_box(FR("Impossibile eseguire Java -jar %s"), static_cast<const char*>(tmp));
|
||
}
|
||
xvt_fsys_set_dir(&old_dir);
|
||
return true;
|
||
}
|
||
|
||
void TIva_send_app::main_loop()
|
||
{
|
||
TIva_send_msk msk;
|
||
while(msk.run() == K_ENTER)
|
||
{
|
||
generate_n_send(msk);
|
||
}
|
||
}
|
||
|
||
|
||
int tf0500(int argc, char* argv[])
|
||
{
|
||
TIva_send_app app;
|
||
app.run(argc, argv, TR("Invio dati liquidazione IVA"));
|
||
return 0;
|
||
} |