Patch level : 12.0 428

Files correlati     : tf
Commento            : Inizio sviluppo programma di controllo spesometro, spostate alcune funzioni in tfutility per comodità

git-svn-id: svn://10.65.10.50/branches/R_10_00@24008 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-07-28 08:20:30 +00:00
parent 7996b8f5d3
commit 725ad83724
12 changed files with 658 additions and 98 deletions

View File

@ -10,11 +10,9 @@ int main(int argc, char** argv)
{
case 1 : rt = tf0200(argc, argv); break; // Comunicazione Liquidazioni Periodiche IVA
//case 2 : rt = tf0300(argc, argv); break; // Nuovo Spesometro (2017)
//case 3: rt = tf0400(argc, argv); break; // Invio TF
case 3: rt = tf0400(argc, argv); break; // Controllo Spesometro
case 4: rt = tf0500(argc, argv); break; // Invio IVA
//case 5: rt = tf0600(argc, argv); break; // Invio Spesometro
default: rt = tf0100(argc, argv); break; // Trasferimento Fatture Elettroniche
default: rt = tf0100(argc, argv); break; // Spesometro
}
return rt;
}

View File

@ -3,6 +3,7 @@
int tf0100(int argc, char* argv[]);
int tf0200(int argc, char* argv[]);
int tf0400(int argc, char* argv[]);
int tf0500(int argc, char* argv[]);
#endif

View File

@ -92,30 +92,6 @@ int getTipoDoc(TString id)
return ret;
}
TRectype getTrasFatt(TString reg, TString codiva)
{
TString key = reg; key << "|" << codiva;
return cache().get(LF_TRASFATT, key);
}
TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi)
{
TString key = tipocf; key << "|" << codcf;
const TRectype& cli = cache().get(LF_CLIFO, key);
if(cli.get_bool("OCCAS"))
{
TRectype cli(LF_CLIFO);
TRectype occas = cache().get(LF_OCCAS, ocfpi);
cli.put("RAGSOC" , occas.get("RAGSOC"));
cli.put("CODRFSO" , "");
cli.put("PAIV" , occas.get("PAIV"));
cli.put("COFI" , occas.get("COFI"));
return cli;
}
else
return cli;
}
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str)
{
@ -149,14 +125,6 @@ bool xvt_fsys_fupdate(const char* src, const char* dst)
return ok;
}
// Controlla se l'azienda ha un RFSO
bool haveRFSO(TString& codrfso)
{
codrfso = cache().get(LF_NDITTE, prefix().firm().codice(), "CODRFSO");
if(codrfso == "") return false;
return true;
}
/* Ritorno il tipo di documento
* TD01: Fattura
* TD04: Nota di credito
@ -914,8 +882,6 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
fo = true;
if(cli || fo) break;
}
// Metto qua il numero di telefono per dopo
TString80 tel; tel << firm.get("PTEL") << firm.get("TEL");
bool ok = false;
if(cli)
{
@ -946,8 +912,6 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
dte.set("P1_TRASMITTPAESE", paese);
dte.set("P1_TRASMITTCOD", "");
dte.set("P1_TIPOINVIO", "DTE");
dte.set("P1_TELEFONO", tel);
dte.set("P1_MAIL", firm.get("MAIL"));
dte.set("P1_GESTIONE", "");
ok = dte.insert();
if(!ok) return false;
@ -983,8 +947,6 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
dtr.set("P1_TRASMITTPAESE", paese);
dtr.set("P1_TRASMITTCOD", "");
dtr.set("P1_TIPOINVIO", "DTR");
dtr.set("P1_TELEFONO", tel);
dtr.set("P1_MAIL", firm.get("MAIL"));
dtr.set("P1_GESTIONE", "");
ok = dtr.insert();
if(!ok) return false;
@ -1112,7 +1074,7 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
TVariant vtipocf = strarr->get(_tipocf), vcodcf = strarr->get(_codcf), voccas = strarr->get(_occas);
#ifdef DBG
if(vtipocf.as_string() == "F" && vcodcf.as_string() == "358")
if(vtipocf.as_string() == "C" && vcodcf.as_string() == "316")
bool tolla = true;
#endif
@ -1185,7 +1147,7 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
{
// Sono sicuro che se è di tipo 3,7 o 8 ha la ragione sociale
char tipo = r_cedeprest.get_char(CLI_ALLEG);
bool rsoc = cedeprest.giuridica() || (tipo == '3' || tipo == '7' || tipo == '8');
bool rsoc = cedeprest.giuridica() || (tipo == '3' || tipo == '7' || tipo == '8' || tipo == '\0');
bool privato = tipo == '6';
if (!rsoc)

View File

@ -181,8 +181,6 @@ BEGIN
ITEM "Rev.\nCharge@4"
ITEM "Auto\nfatt.@3"
ITEM "Spedita@5"
ITEM "Invio@3"
ITEM "Mod.@3"
ITEM "N.\nRegistraz.@10"
ITEM "Codici Errori@10"
DEFAULT "*" // Impedisce il salvataggio su profilo .ini
@ -361,7 +359,6 @@ BEGIN
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
OUTPUT A_ALIQUOTA CODTAB
HELP "Codice IVA"
CHECKTYPE REQUIRED
VALIDATE ZEROFILL_FUNC 2
END

View File

@ -19,6 +19,7 @@
#include "../fe/felib.h"
#include "tf0100a.h"
#include "tfutility.h"
/////////////////////////////////////////////////////////////////////////////////////
// Globals
/////////////////////////////////////////////////////////////////////////////////////
@ -95,16 +96,11 @@ enum spesometroFields{
// Da un id ritorna il tipo doc corrispondente
TString getTipoDoc(int id);
int getTipoDoc(TString id);
// Ritorna il record custom
TRectype getTrasFatt(TString reg, TString codiva);
// Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas
TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi);
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str);
// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h)
bool xvt_fsys_fupdate(const char* src, const char* dst);
// Controlla se l'azienda ha un RFSO
bool haveRFSO(TString& codrfso);
// Decodifica il tipo di documento per il trasferimento fatture
const char * decodTipo(TToken_string* strarr);
// Salvo un singolo record
@ -202,11 +198,6 @@ class TTrFa_mask : public TAutomask
protected:
virtual void next_page(int p);
const char * natura(const TString& codiva) const;
real get_IVA(const TString& codiva) const;
TString findDetraib(TString tipodet) const;
TString revCharge(TString numreg) const;
TString getRFSO(TString codrfso) const;
TRecnotype nuovo_progr() const;
void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);

View File

@ -494,7 +494,7 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string* rec)
coderr << "3;";
}
if(decodTipo(rec) == "ERR")
if(decodTipo(rec) == "ERR0")
{
ok = false;
msgerr.cut(0) << "Non riesco a determinare il tipo di documento corretto per l'agenzia delle entrate!";
@ -612,8 +612,8 @@ void TTrFa_mask::load_sheet()
}
//TString key; key << "TIPOA=" << prefix().firm().get("TIPOA")<< ",CODANAGR=" << prefix().firm().get("CODANAGR");
TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR");
const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV");
const TString cofiDitta = cache().get(LF_ANAG, key, "COFI");
static const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV");
static const TString cofiDitta = cache().get(LF_ANAG, key, "COFI");
TTrFa_cursors c;
@ -694,36 +694,6 @@ void TTrFa_mask::load_sheet()
sheet.show();
}
TString TTrFa_mask::findDetraib(TString tipodet) const
{
real perc = cache().get("%DET", tipodet, "R0");
return perc.stringa(6,2);
}
const char * TTrFa_mask::natura(const TString& codiva) const
{
const TRectype& ai = cache().get("%IVA", codiva);
TString & natura = get_tmp_string(4);
natura = ai.get("S12");
return natura;
}
real TTrFa_mask::get_IVA(const TString& codiva) const
{
const TRectype& ai = cache().get("%IVA", codiva);
return ai.get_real("R0");
}
TString TTrFa_mask::revCharge(TString numreg) const
{
// Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi
TString key = numreg;
TCausale caus(cache().get(LF_MOV, key, "CODCAUS"));
if(caus.reverse_charge())
bool tolla = true;
return caus.reverse_charge() ? "X" : "";
}
bool TTrFa_mask::checkInvio(const TString& invio)
{
@ -744,11 +714,6 @@ bool TTrFa_mask::checkInvio(const TString& invio)
return ok;
}
TString TTrFa_mask::getRFSO(TString codrfso) const
{
TString key; key << codrfso[0] << "|" << codrfso.mid(1);
return cache().get(LF_ANAG, key, "RAGSOC");
}
TTrFa_mask::TTrFa_mask(TString msk)
: TAutomask(msk), _filter_changed(true)

225
src/tf/tf0400.cpp Normal file
View File

@ -0,0 +1,225 @@
#include "tf0400a.h"
#include "tfutility.h"
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <recset.h>
#include <recarray.h> // cache()
/****************************************************************************************************
* TSpeCheck_msk
****************************************************************************************************/
class TSpeCheck_msk : public TAutomask
{
void fillNoFilter();
void fillDiff();
void fillCust();
void getFilFlag(TString& query);
void enableEdit(bool en);
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TSpeCheck_msk() : TAutomask("tf0400a"){}
};
bool TSpeCheck_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch(o.dlg())
{
case DLG_RECALC:
if(e != fe_button) break;
case F_TIPOCONTROLLO:
{
switch(o.mask().get_long(F_TIPOCONTROLLO))
{
case 0:
fillNoFilter();
break;
case 1:
fillDiff();
break;
case 2:
fillCust();
default:
break;
}
}
break;
default:
break;
}
return true;
}
void TSpeCheck_msk::fillNoFilter()
{
TString query = "USE RMOVIVA\n";
query << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=\"" << get(F_TIPOCF) << "\")";
if(get(F_CODCF) != "")
query << "&&STR((23.CODCF=#CODCF))";
getFilFlag(query);
}
void TSpeCheck_msk::fillDiff()
{
}
void TSpeCheck_msk::fillCust()
{
TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR");
static const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV");
static const TString cofiDitta = cache().get(LF_ANAG, key, "COFI");
TString query = "USE TRASFATT\n";
query << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << get(F_TIPOCF) << "\")";
if(get(F_CODCF) != "")
query << "&&STR((CODCF=#CODCF))";
getFilFlag(query);
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) != "")
rset.set_var("#CODCF", get(F_CODCF));
int nrec = rset.items();
TSheet_field& s = sfield(F_RIGHE);
// Nascondo lo sheet
s.hide();
if(!s.empty())
s.destroy();
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("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
row.add(natura(rset.get("CODIVA").as_string()), s.cid2index(A_NATURA));
// DETR
row.add(findDetraib(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(getRFSO(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO));
// RC
row.add((revCharge(rset.get("NUMREG").as_string())), s.cid2index(A_REVERSE));
// AUTOFATT
if(rset.get("AUTOFATT").as_string() == "X" || pivaDitta == clifo.get("PAIV"))
{
row.add("X", s.cid2index(A_AUTOFATT));
row.add(pivaDitta, s.cid2index(A_PAIV));
row.add(cofiDitta, 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_string() == "X", s.cid2index(A_SPEDITA));
row.add(rset.get("NUMREG").as_string(), s.cid2index(A_NUMERO));
}
s.force_update();
s.show();
enableEdit(true);
}
void TSpeCheck_msk::getFilFlag(TString& query)
{
switch(get_int(F_FLAG))
{
case 1:
query << "&&((TFINVIO=\"\")||(TFINVIO=\"X\")||(TFINVIO=\"F\")||(TFINVIO=\"E\"))";
break;
case 2:
query << "&&(TFINVIO=\"I\")";
break;
case 3:
query << "&&(TFINVIO=\"N\")";
case 0:
default:
break;
}
}
void TSpeCheck_msk::enableEdit(bool en)
{
// Abilito i bottoni
enable(DLG_SAVEREC,en);
enable(DLG_CANCEL, en);
TSheet_field& s = sfield(F_RIGHE);
// Abilito i campi
enable(A_ELIMINA,en);
enable(A_DATAREG,en);
enable(A_TIPODOC,en);
enable(A_NUMDOC,en);
enable(A_DATADOC,en);
enable(A_ALIQUOTA,en);
enable(A_IMPONIBILE,en);
enable(A_IMPOSTA,en);
enable(A_NATURA,en);
enable(A_TIPOCF,en);
enable(A_CODCF,en);
enable(A_OCFPI,en);
}
/****************************************************************************************************
* TSpeCheck_app
****************************************************************************************************/
class TSpeCheck_app : public TSkeleton_application
{
public:
virtual void main_loop();
};
TSpeCheck_app& app() { return (TSpeCheck_app&)main_app(); }
void TSpeCheck_app::main_loop()
{
TSpeCheck_msk msk;
msk.run();
}
int tf0400(int argc, char* argv[])
{
TSpeCheck_app app;
app.run(argc, argv, TR("Controlli Spesometro"));
return 0;
}

32
src/tf/tf0400a.h Normal file
View File

@ -0,0 +1,32 @@
#define F_TIPOCONTROLLO 301
#define F_FLAG 302
#define F_DATAINI 303
#define F_DATAFIN 304
#define F_CODCF 305
#define F_TIPOCF 306
#define F_RAGSOC 307
#define F_RIGHE 201 // Sheet righe tf
#define A_ELIMINA 101
#define A_DATAREG 102
#define A_TIPODOC 103
#define A_NUMDOC 104
#define A_DATADOC 105
#define A_ALIQUOTA 106
#define A_IMPONIBILE 107
#define A_IMPOSTA 108
#define A_NATURA 109
#define A_DETRAIB 110
#define A_TIPOCF 111
#define A_CODCF 112
#define A_OCFPI 113
#define A_RAGSOC 114
#define A_RFSO 115
#define A_RAGSOCRFSO 116
#define A_PAIV 117
#define A_COFI 118
#define A_REVERSE 119
#define A_AUTOFATT 120
#define A_SPEDITA 121
#define A_NUMERO 122

289
src/tf/tf0400a.uml Normal file
View File

@ -0,0 +1,289 @@
#include "tf0400a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_RECALC 2 2
BEGIN
PROMPT 1 1 "Aggiorna"
PICTURE TOOL_CONVERT
END
BUTTON DLG_SAVEREC 2 2
BEGIN
PROMPT 1 1 "Salva"
PICTURE TOOL_SAVEREC
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 "Elimina"
PICTURE TOOL_DELREC
END
#include <helpbar.h>
ENDPAGE
PAGE "Controlli Spesometro" 0 2 0 0
LIST F_TIPOCONTROLLO 35 35
BEGIN
PROMPT 1 0 "Controllo da effettuare"
ITEM "0|Movimenti esclusi"
ITEM "1|Differenze Prima Nota/Spesometro"
ITEM "2|Visualizza tutti i movimenti Spesometro"
FLAGS ""
END
LIST F_FLAG 35
BEGIN
PROMPT 1 1 "Stato movimento "
ITEM "0|Tutti"
ITEM "1|Da inviare"
ITEM "2|Inviati"
ITEM "3|Disabilitati"
FLAGS ""
END
DATE F_DATAINI
BEGIN
PROMPT 65 0 "Data iniziale:"
VALIDATE DATE_CMP_FUNC <= F_DATAFIN
WARNING "La data iniziale non può essere maggiore della data finale"
END
DATE F_DATAFIN
BEGIN
PROMPT 65 1 "Data Finale: "
VALIDATE DATE_CMP_FUNC >= F_DATAINI
WARNING "La data finale non può essere minore della data iniziale"
END
RADIOBUTTON F_TIPOCF 15
BEGIN
PROMPT 1 2 "Tipo C/F"
ITEM "C|Cliente"
ITEM "F|Fornitore"
END
NUMBER F_CODCF 6
BEGIN
PROMPT 18 3 "Codice:"
USE LF_CLIFO
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Occasionale@C" OCCAS
DISPLAY "Codice Fiscale@16" COFI
DISPLAY "Partita IVA@15" PAIV
OUTPUT F_CODCF CODCF
OUTPUT F_RAGSOC RAGSOC
CHEKTYPE NORMAL
GROUP 1
FLAGS ""
END
STRING F_RAGSOC 50 49
BEGIN
PROMPT 18 5 "R.Soc: "
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Codice Fiscale@16" COFI
DISPLAY "Partita IVA@15" PAIV
COPY OUTPUT F_CODCF
ADD RUN CG0 -1
GROUP 1
FLAGS ""
END
SPREADSHEET F_RIGHE
BEGIN
PROMPT 0 8 "Righe movimenti"
ITEM "Elimina@1F"
ITEM "Data\n Reg.@8F"
ITEM "Tipo\nDocum.@2F"
ITEM "Numero\nDocum.@5F"
ITEM "Data\nDocum.@10"
ITEM "Aliquota@4"
ITEM "Imponibile@10"
ITEM "Imposta@10"
ITEM "Natura\nIVA@4"
ITEM "% Detr.@6"
ITEM "C/F@2"
ITEM "Codice@6"
ITEM "Occas.@16"
ITEM "Ragione Sociale@35"
ITEM "RF/SO@16"
ITEM "Rag. Soc. RF/SO@35"
ITEM "Partita IVA@11"
ITEM "Codice Fiscale@15"
ITEM "Rev.\nCharge@4"
ITEM "Auto\nfatt.@3"
ITEM "Spedita@5"
ITEM "N.\nRegistraz.@10"
DEFAULT "*" // Impedisce il salvataggio su profilo .ini
END
ENDPAGE
ENDMASK
PAGE "Riga" -1 -1 69 14
BOOLEAN A_ELIMINA
BEGIN
PROMPT 52 10 "Elimina"
FIELD SPEDITA
FLAGS "D"
END
BOOLEAN A_SPEDITA
BEGIN
PROMPT 52 10 "Gia' spedita"
FIELD SPEDITA
FLAGS "D"
END
NUMBER A_NUMERO 10
BEGIN
PROMPT 1 0 "N.Movimento"
FLAGS "D"
FIELD PROGR
END
DATE A_DATAREG
BEGIN
PROMPT 26 0 "Data reg."
FIELD DATAREG
FLAGS "D"
END
STRING A_TIPOCF 1
BEGIN
PROMPT 1 1 "Tipo C/F "
FIELD TIPOCF
FLAGS "D"
END
NUMBER A_CODCF 6
BEGIN
PROMPT 26 1 "Cod. C/F"
FIELD CODCF
FLAGS "D"
END
STRING A_OCFPI 16
BEGIN
PROMPT 44 1 "Occas."
FIELD OCFPI
FLAGS "D"
END
STRING A_RAGSOC 50 47
BEGIN
FIELD RAGSOC
PROMPT 1 2 "Ragione Sociale"
FLAGS "D"
END
STRING A_RFSO 6
BEGIN
FIELD RFSO
PROMPT 1 4 "Codice RF/SO: "
HELP "Codice Rappresentante Fiscale o Stabile Organizzazione"
FLAGS "D"
END
STRING A_RAGSOCRFSO 50 47
BEGIN
FIELD RAGSOCRFSO
PROMPT 1 5 "Rag. Soc. RF/SO"
HELP "Ragione Sociale RF/SO"
FLAGS "D"
END
STRING A_TIPODOC 2
BEGIN
PROMPT 23 6 "Tipo doc. "
FIELD TIPODOC
FLAGS "D"
END
STRING A_NUMDOC 7
BEGIN
PROMPT 42 6 "Num. doc. "
FIELD NUMDOC
FLAGS "D"
END
DATE A_DATADOC
BEGIN
PROMPT 1 6 "Data doc."
FIELD DATADOC
FLAGS "D"
END
STRING A_NATURA 2
BEGIN
PROMPT 20 7 "Natura IVA"
FIELD S12
FLAGS "D"
END
STRING A_ALIQUOTA 4
BEGIN
PROMPT 1 7 "Aliquota "
HELP "Codice aliquota"
FIELD CODTAB
FLAGS "D"
END
STRING A_DETRAIB 6
BEGIN
PROMPT 1 8 "% Detraibilita'"
HELP "Percentuale di detraibilita'"
FLAGS "D"
END
NUMBER A_IMPONIBILE 12 2
BEGIN
PROMPT 42 8 "Imponibile"
FIELD IMPORTO
FLAGS "D"
END
NUMBER A_IMPOSTA 12 2
BEGIN
PROMPT 42 9 "Imposta "
FIELD IMPOSTA
FLAGS "D"
END
BOOLEAN A_REVERSE
BEGIN
PROMPT 1 9 "Reverse charge"
FIELD REVERSE
FLAGS "D"
END
BOOLEAN A_AUTOFATT
BEGIN
PROMPT 25 9 "Autofattura"
FIELD AUTOFATT
FLAGS "D"
END
STRING A_PAIV 12
BEGIN
PROMPT 1 3 "Partita IVA "
FLAGS "D"
END
STRING A_COFI 16
BEGIN
PROMPT 33 3 "Codice Fiscale"
FLAGS "D"
END
ENDMASK

View File

@ -4,5 +4,6 @@ Picture = <cg01>
Module = tf
Flags = ""
Item_01 = "Trasferimento Fatture", "tf0 -0", ""
Item_02 = "Liquidazione IVA Periodica", "tf0 -1", ""
Item_03 = "Invio Liquidazione IVA Periodica", "tf0 -4", ""
Item_02 = "Controllo Spesometro", "tf0 -3", ""
Item_03 = "Liquidazione IVA Periodica", "tf0 -1", ""
Item_04 = "Invio Liquidazione IVA Periodica", "tf0 -4", ""

78
src/tf/tfutility.cpp Normal file
View File

@ -0,0 +1,78 @@
#include <recarray.h> // cache()
#include "../ve/velib05.h"
#include "../cg/cglib03.h"
#include "../fe/felib.h"
#include "tfutility.h"
// Ritorna il record da trasfatt
TRectype getTrasFatt(TString reg, TString codiva)
{
TString key = reg; key << "|" << codiva;
return cache().get(LF_TRASFATT, key);
}
// Ritorna il cliente
TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi)
{
TString key = tipocf; key << "|" << codcf;
const TRectype& cli = cache().get(LF_CLIFO, key);
if(cli.get_bool("OCCAS"))
{
TRectype cli(LF_CLIFO);
TRectype occas = cache().get(LF_OCCAS, ocfpi);
cli.put("RAGSOC" , occas.get("RAGSOC"));
cli.put("CODRFSO" , "");
cli.put("PAIV" , occas.get("PAIV"));
cli.put("COFI" , occas.get("COFI"));
return cli;
}
else
return cli;
}
// Controlla se l'azienda ha un RFSO
bool haveRFSO(TString& codrfso)
{
codrfso = cache().get(LF_NDITTE, prefix().firm().codice(), "CODRFSO");
if(codrfso == "") return false;
return true;
}
const char * natura(const TString& codiva)
{
const TRectype& ai = cache().get("%IVA", codiva);
TString & natura = get_tmp_string(4);
natura = ai.get("S12");
return natura;
}
TString findDetraib(TString tipodet)
{
real perc = cache().get("%DET", tipodet, "R0");
return perc.stringa(6,2);
}
real get_IVA(const TString& codiva)
{
const TRectype& ai = cache().get("%IVA", codiva);
return ai.get_real("R0");
}
TString revCharge(TString numreg)
{
// Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi
TString key = numreg;
TCausale caus(cache().get(LF_MOV, key, "CODCAUS"));
if(caus.reverse_charge())
bool tolla = true;
return caus.reverse_charge() ? "X" : "";
}
TString getRFSO(TString codrfso)
{
TString key; key << codrfso[0] << "|" << codrfso.mid(1);
return cache().get(LF_ANAG, key, "RAGSOC");
}

21
src/tf/tfutility.h Normal file
View File

@ -0,0 +1,21 @@
#include <strings.h>
#include <recset.h>
// Funzioni comode per più programmi
// Ritorna il record custom
TRectype getTrasFatt(TString reg, TString codiva);
// Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas
TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi);
// Controlla se l'azienda ha un RFSO
bool haveRFSO(TString& codrfso);
// Ritorna la natura da un codice IVA
const char * natura(const TString& codiva);
// Ritorna l'IVA
real get_IVA(const TString& codiva);
// Ritorna la % di detraibilità
TString findDetraib(TString tipodet);
// Ritorna "X" se ha il reverse charge
TString revCharge(TString numreg);
// Ritorna la ragione sociale del RFSO
TString getRFSO(TString codrfso);