Patch level : 12.0 384

Files correlati     : tf
Commento            : 
- Aggiunta nuovo modulo TF, con programma Liquidazione IVA Periodica
- Aggiunta tabelle f173 e f174, la prima per il trasferimento fatture (in lavorazione) e la seconda per questo nuovo programma

git-svn-id: svn://10.65.10.50/branches/R_10_00@23760 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-04-28 15:14:33 +00:00
parent 555390f63c
commit f5ad9b6e81
13 changed files with 1701 additions and 0 deletions

3
src/tf/f173.dir Normal file
View File

@ -0,0 +1,3 @@
173
0
$trasfatt|0|0|69|0|Tabella trasferimento fatture|||

13
src/tf/f173.trr Normal file
View File

@ -0,0 +1,13 @@
173
9
NUMREG|9|4|0|Codice esercizio
TIPO|7|1|0|Tipo <C>liente o <F>ornitore
CODCF|3|6|0|Codice
TIPODOC|1|2|0|Tipo documento
NUMDOC|1|7|0|Numero documento
DATADOC|5|8|0|Data documento
IMPONIBILE|4|18|3|Imponibile
IMPOSTA|4|18|3|Imposta
CODIVA|1|4|0|Codice IVA
1
NUMREG+CODIVA|

3
src/tf/f174.dir Normal file
View File

@ -0,0 +1,3 @@
174
0
$ivaliq|1|1|523|0|Righe liquidazione mensile/trimestrale IVA|||

63
src/tf/f174.trr Normal file
View File

@ -0,0 +1,63 @@
174
59
ANNO|2|4|0|Anno di imposta
MESE|2|2|0|Periodo dichiarazione, mese
TRIMESTRE|2|1|0|Periodo dichiarazione, trimestre
SUBFOR|8|1|0|Subforniture
EVECC|2|1|0|Eventi eccezionali
TOTOPATT|4|18|3|Totale operazioni attive (al netto dell'IVA)
TOTOPATTXC|4|18|3|Totale operazioni attive IVAxCassa
TOTOPPAS|4|18|3|Totale operazioni passive (al netto dell'IVA)
TOTOPPASXC|4|18|3|Totale operazioni passive IVAxCassa
IVAES|4|18|3|IVA esigibile
IVAESXC|4|18|3|IVA esigibile x cassa
IVAESDIFF|4|18|3|IVA esigibile differita
IVADET|4|18|3|IVA detratta
IVADETXC|4|18|3|IVA detratta x cassa
IVADETDIFF|4|18|3|IVA detratta differita
IVADOV|4|18|3|IVA dovuta
IVADOVC|4|18|3|IVA a credito VP6 col 2
DEBPREC|4|18|3|Debito periodo precedente
CREPREC|4|18|3|Credito periodo precedente
CREAPREC|4|18|3|Credito anno precedente
VEAUE|4|18|3|Versamenti auto UE
CREIMP|4|18|3|Crediti di imposta
INTLIQTRI|4|18|3|Interessi dovuti per liquidazioni trimestrali
ACCDOV|4|18|3|Acconto dovuto
IVAVER|4|18|3|IVA da versare
IVAVERC|4|18|3|IVA a credito VP14 col 2
RETTIFICHE|4|18|3|Rettifiche
VARIMP|4|18|3|Variazioni di imposta
RIMBORSI|4|18|3|Rimborsi
IMPNOVER|4|18|3|Imposta non versata
CRESPEC|4|18|3|Crediti speciali
VEREFF|4|18|3|Versamenti effettuati
BTOTOPATT|8|1|0|Booleano controllo modifica da utente
BTOTOPATTX|8|1|0|Booleano controllo modifica da utente
BTOTOPPAS|8|1|0|Booleano controllo modifica da utente
BTOTOPPASX|8|1|0|Booleano controllo modifica da utente
BIVAES|8|1|0|Booleano controllo modifica da utente
BIVAESXC|8|1|0|Booleano controllo modifica da utente
BIVAESDIFF|8|1|0|Booleano controllo modifica da utente
BIVADET|8|1|0|Booleano controllo modifica da utente
BIVADETXC|8|1|0|Booleano controllo modifica da utente
BIVADETDIF|8|1|0|Booleano controllo modifica da utente
BIVADOV|8|1|0|Booleano controllo modifica da utente
BIVADOVC|8|1|0|Booleano controllo modifica da utente
BDEBPREC|8|1|0|Booleano controllo modifica da utente
BCREPREC|8|1|0|Booleano controllo modifica da utente
BCREAPREC|8|1|0|Booleano controllo modifica da utente
BVEAUE|8|1|0|Booleano controllo modifica da utente
BCREIMP|8|1|0|Booleano controllo modifica da utente
BINTLIQTRI|8|1|0|Booleano controllo modifica da utente
BACCDOV|8|1|0|Booleano controllo modifica da utente
BIVAVER|8|1|0|Booleano controllo modifica da utente
BIVAVERC|8|1|0|Booleano controllo modifica da utente
BRETTIFICH|8|1|0|Booleano controllo modifica da utente
BVARIMP|8|1|0|Booleano controllo modifica da utente
BRIMBORSI|8|1|0|Booleano controllo modifica da utente
BIMPNOVER|8|1|0|Booleano controllo modifica da utente
BCRESPEC|8|1|0|Booleano controllo modifica da utente
BVEREFF|8|1|0|Booleano controllo modifica da utente
1
ANNO+MESE|

21
src/tf/tf0.cpp Normal file
View File

@ -0,0 +1,21 @@
#include <xvt.h>
#include "tf0.h"
int main(int argc, char** argv)
{
int rt = -1;
const int r = (argc > 1) ? atoi( &argv[1][1] ) : 1;
switch (r)
{
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 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
}
return rt;
}

8
src/tf/tf0.h Normal file
View File

@ -0,0 +1,8 @@
#ifndef __TF0_H
#define __TF0_H
int tf0100(int argc, char* argv[]);
int tf0200(int argc, char* argv[]);
int tf0500(int argc, char* argv[]);
#endif

590
src/tf/tf0200.cpp Normal file
View File

@ -0,0 +1,590 @@
#include <relapp.h>
#include <automask.h>
#include <config.h>
#include <progind.h>
#include <recarray.h> // cache()
#include <recset.h> // TISAM_recordset
#include <rmoviva.h>
#include <utility.h>
#include "cglib03.h"
#include "tf0.h"
#include "tf0200a.h"
#define CAMPI_CON_BOOLEAN F_TOTOPATT
// ComLiqPerIva: Comunicazione Liquidazioni Periodiche IVA
/** Utilities **/
// Ritorna un cursore di tab.PRM
const TCursor getPRM(int anno)
{
static TRelation rprm(LF_TAB);
TRectype from(rprm.curr()); from.put("COD", "PRM");from.put("CODTAB", anno);
TRectype to(rprm.curr()); to.put("COD" , "PRM");to.put("CODTAB", anno);
TCursor cprm(&rprm, "", 1, &from, &to);
return cprm;
}
// Ritorna il record richiesto di tabcom.LIM
const TRectype getLIM(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 tabcom.LIA
const TRectype getLIA(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);
}
// Ritorna il record valido richiesto di tabcom.VER
const TRectype getVER(int anno, int mese)
{
// Questa tabella ha come chiave l'inizio validità, creo un cursore e scorro finche non trovo l'ultimo periodo valido
static TRelation rver(LF_TABCOM);
static TRectype from(rver.curr()); from.put("COD", "VER");
static TRectype to(rver.curr()); to.put("COD" , "VER");
static TCursor cver(&rver, "", 1, &from, &to);
// Costruisco il controllo sulla chiave
TString key; key << anno;
if(mese < 10)
key << "0" << mese;
else
key << mese;
TRectype rowRet(LF_TABCOM);
for(cver = 0; cver.pos() < cver.items(); ++cver)
{
TRectype rowVer = cver.curr();
if(rowVer.get("CODTAB") < key)
{
rowRet = rowVer;
}
else
break;
}
return rowRet;
}
// Scopiazzata brutalmente da cg4304.cpp
int calc_inc_diff(int anno, int mese, int tipoiva, real& imponibile_diff, real& imposta_diff, real& imponibile_xcas, real& imposta_xcas)
{
CHECKD(tipoiva == 1 || tipoiva == 2, "Bad tipo iva:", tipoiva);
int flag = 0;
imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO;
TString limit; limit << "ANNOLIQ=" << anno;
if (mese < 13) limit << " MESELIQ=" << mese;
TString query; // righe pagamento (TIPOMOV>=3) ed escluse NC!
query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(TIPOIVA=" << tipoiva << ")"
<< "\nFROM " << limit << "\nTO " << limit;
TISAM_recordset id(query);
const TRectype& rec = id.cursor()->curr();
for (bool ok = id.move_first(); ok; ok = id.move_next())
{
const real iva = rec.get_real(RMI_IMPOSTA);
const real imp = rec.get_real(RMI_IMPONIBILE);
if (!iva.is_zero() || !imp.is_zero())
{
const int tipodiff = rec.get_int("TIPODIFF");
switch (tipodiff)
{
case 1: imponibile_diff += imp; imposta_diff += iva; break;
case 2: imponibile_xcas += imp; imposta_xcas += iva; break;
default: break;
}
flag |= tipodiff;
}
}
if (tipoiva == 2)
{
real perc_prorata;
query = "USE PLM";
query << "\nFROM CODTAB=" << anno << "\nTO CODTAB=" << anno;
TISAM_recordset ip(query);
const TRectype& recp = ip.cursor()->curr();
for (bool ok = ip.move_first(); ok && perc_prorata == ZERO; ok = ip.move_next())
{
int m = atoi(ip.get("CODTAB").as_string().mid(10));
real p = ip.get("R12").as_real();
if (m == mese && p != ZERO)
perc_prorata = p;
}
if (perc_prorata > ZERO)
{
real ind = imposta_diff * perc_prorata / CENTO;
ind.round(TCurrency::get_firm_dec());
imposta_diff -= ind;
ind = imposta_xcas * perc_prorata / CENTO;
ind.round(TCurrency::get_firm_dec());
imposta_xcas -= ind;
}
}
return flag;
}
/* Da errori in allocazione TArray
const TISAM_recordset getCurIvaXCassa(TDate data_da, TDate data_a, TString codreg_att)
{
TString query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(STR((MESELIQ<13)&&(TIPOMOV>2)&&(MOV.TOTDOC!=0)&&(IMPOSTA!=0)&&NUM(INDETR!='X')))";
query << "\nBY DATAREGP DATAREG NUMPRO";
query << "\nJOIN MOV INTO NUMREG==NUMREG";
query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF";
TISAM_recordset id(query);
id.set_var("#DAL", data_da);
id.set_var("#AL", data_a);
id.set_var("#REG", codreg_att);
return id;
}
*/
class ComLiqPerIva_mask : public TAutomask
{
protected:
bool mensile;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void extractinator();
public:
ComLiqPerIva_mask() : TAutomask("tf0200a") { first_focus(F_ANNO); }
};
bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
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")
{
mensile = true;
enable(F_MESE);
disable(F_TRIMESTRE);
}
else
{
mensile = false;
disable(F_MESE);
enable(F_TRIMESTRE);
}
// Abilito i campi a schiena
for(int i = F_SUBFORNITURE; i <= F_VEREFF; i++)
{
enable(i);
if(i >= CAMPI_CON_BOOLEAN)
{
//enable(i + 50); Anche disabilitati funzionano
}
}
}
break;
case F_MESE:
if(e == fe_modify)
set(F_TRIMESTRE, (get_int(F_MESE) - 1) / 3 + 1);
break;
case F_TRIMESTRE:
if(e == fe_modify)
set(F_MESE, get_int(F_TRIMESTRE) * 3);
break;
case DLG_RECALC:
// Vado a prendere i dati di quel mese dalla liquidazione IVA
if(e == fe_button)
{
// Controllo che non ci sia già
if(!cache().get(LF_IVALIQ, TString(get(F_ANNO)) << "|" << get(F_MESE)).empty())
{
if(!yesno_box("Sono già stati elaborati questi dati, si desidera ricalcolarli?"))
break;
}
extractinator();
}
break;
case DLG_EMAIL:
// Richiamo il programma di invio
// TExternal_application app;
break;
}
if(o.dlg() >= CAMPI_CON_BOOLEAN && e == fe_modify) // Se l'utente modifica manualmente uno dei campi calcolati da Campo flaggo il DB
{
set(o.dlg() + 50, "X");
}
// Controllo sull'aggiornamento di campi collegati ad altri
if(e == fe_modify)
{
switch(o.dlg())
{
// Iva Esigibile VS Iva Detratta
case F_IVAES :
case F_IVAESXC :
case F_IVAESDIFF :
case F_IVADET :
case F_IVADETXC :
case F_IVADETDIFF :
{
real ivaes = get_real(F_IVAES) + get_real(F_IVAESXC) + get_real(F_IVAESDIFF);
real ivadet = get_real(F_IVADET) + get_real(F_IVADETXC) + get_real(F_IVADETDIFF);
if((ivaes - ivadet) >= ZERO)
{
set(F_IVADOV, ivaes - ivadet);
set(F_IVADOVC, ZERO);
}
else
{
set(F_IVADOV, ZERO);
set(F_IVADOVC, (ivaes - ivadet) * -UNO);
}
}
// IVA da versare VS a credito
case F_IVADOV :
case F_DEBPREC :
case F_INTLIQTRI :
case F_IVADOVC :
case F_CREPREC :
case F_CREAPREC :
case F_VEAUE :
case F_CREIMP :
case F_ACCDOV :
{
// Ricalcolo VP13 e VP14
real debito = get_real(F_IVADOV) + get_real(F_DEBPREC) + get_real(F_INTLIQTRI);
real credito = get_real(F_IVADOVC) + get_real(F_CREPREC) + get_real(F_CREAPREC) + get_real(F_VEAUE) + get_real(F_CREIMP) + get_real(F_ACCDOV);
if(debito - credito >= ZERO)
{
set(F_IVAVER, debito - credito);
set(F_IVAVERC, ZERO);
}
else
{
set(F_IVAVER, ZERO);
set(F_IVAVERC, credito - debito);
}
}
}
}
return true;
}
// Funzione che effettivamente estrapola i dati necessari
void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO
{
/* Devo estrapolare più mesi, per farlo vado ciclo n volte (1 o 3) in base se stiamo parlando di trimestralità o meno
* I dati da prelevare saranno in PRM, LIM e %LIA
* In PRM e LIM troverò le informazioni suddivise per mese, mentre in %LIA ho l'anno di liquidazione
*/
int start = mensile ? get_int(F_MESE) : get_int(F_TRIMESTRE) * 3;
int end = mensile ? start : start + 3;
int anno = get_int(F_ANNO);
// Valori da calcolare
real totopatt = ZERO;
real totopattxc = ZERO;
real totoppas = ZERO;
real totoppasxc = ZERO;
real ivaes = ZERO;
real ivaesxc = ZERO;
real ivaesdiff = ZERO;
real ivadet = ZERO;
real ivadetxc = ZERO;
real ivadetdiff = ZERO;
real rettifiche = ZERO;
real varimp = ZERO;
real rimborsi = ZERO;
real impnover = ZERO;
real crespec = ZERO;
real vereff = ZERO;
real ivadov = ZERO;
real ivadovc = ZERO;
real debprec = ZERO;
real creprec = ZERO;
real creaprec = ZERO;
real intliqtri = ZERO;
real accdov = ZERO;
real ivaver = ZERO;
real ivaverc = ZERO;
// Costanti
const TString codreg_att = "VEN";
const TString codreg_pas = "ACQ";
for(; start <= end; start++)
{
TDate data_da(1, start, anno);
TDate data_a(31, start, anno);
/****************************************************************************************************************
* TOTOPATT, TOTOPATTXC, TOTOPPAS, TOTOPPASXC, IVAES, IVAESXC, IVAESDIFF,
* IVADET , IVADETXC, IVADETDIFF
****************************************************************************************************************/
// Riga LIM
const TRectype rowLim = getLIM(anno, start);
// Controllo che la liquidazione è stata effettuata
if(rowLim.empty())
{
error_box("Attenzione non è stata calcolata la liquidazione del periodo corrente");
return;
}
// Riga LIA
const TRectype rowLia = getLIA(anno);
// Calcolo il cursore di PRM
//TCursor curPrm = getPRM(anno);
static TRelation rprm(LF_TAB);
TRectype from(rprm.curr()); from.put("COD", "PRM");from.put("CODTAB", anno);
TRectype to(rprm.curr()); to.put("COD" , "PRM");to.put("CODTAB", anno);
TCursor curPrm(&rprm, "", 1, &from, &to);
for(curPrm = 0; curPrm.pos() < curPrm.items(); ++curPrm)
{
TRectype rowPrm = curPrm.curr();
// Controllo il mese
TString codtab = rowPrm.get("CODTAB");
int app = stoi(rowPrm.get("CODTAB").sub(13,15));
if(stoi(rowPrm.get("CODTAB").sub(13,15)) != start) continue;
// Verifico su che registro mi trovo
if(rowPrm.get("CODTAB").sub(10,13) == codreg_att)
{
totopatt = totopatt + rowPrm.get_real("R0");
}
else if(rowPrm.get("CODTAB").sub(10,13) == codreg_pas)
{
totoppas = totoppas + rowPrm.get_real("R0");
}
}
real appReal = ZERO;
// IVA esigibile
TToken_string tokenPrec = rowLim.get("S0");
tokenPrec.get(0, appReal);
ivaes = ivaes + appReal;
// IVA detraibile
appReal = ZERO; // Nel dubbio azzero
tokenPrec.get(1, appReal);
ivadet = ivadet + appReal;
// Se ha attiva l'IVA x cassa
if(gestione_IVAxCassa(data_da))
{
static TRelation rreg(LF_TAB);
TRectype fromReg(rprm.curr()); fromReg.put("COD", "REG");fromReg.put("CODTAB", anno);
TRectype toReg(rprm.curr()); toReg.put("COD" , "REG"); toReg.put("CODTAB", anno);
// Questo codice è stato preso da print_IVAxCassa in cg4400.cpp
TString query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(STR((MESELIQ<13)&&(TIPOMOV>2)&&(MOV.TOTDOC!=0)&&(IMPOSTA!=0)&&NUM(INDETR!='X')))";
query << "\nBY DATAREGP DATAREG NUMPRO";
query << "\nJOIN MOV INTO NUMREG==NUMREG";
query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF";
TCursor curReg(&rreg, "", 1, &fromReg, &toReg);
for(curReg = 0; curReg.pos() < curReg.items(); ++curReg)
{
TRectype rowReg = curReg.curr();
// Siamo su un registro non IVA
int tipo_registro = rowReg.get_int("I0");
if(tipo_registro > 2) continue;
TISAM_recordset id(query);
id.set_var("#DAL", data_da);
id.set_var("#AL", data_a);
id.set_var("#REG", rowReg.get("CODTAB").sub(4));
const TRectype& rec = id.cursor()->curr();
for (bool ok = id.move_first(); ok; ok = id.move_next())
{
if(tipo_registro == 1) // Vendite
{
totopattxc = totopattxc + rec.get_real("IMPOSTA");
}
else // Acquisti
{
totoppasxc = totoppasxc + rec.get_real("IMPOSTA");
}
}
}
// IVA esigibile
TToken_string tokenPrec = rowLim.get("S0");
tokenPrec.get(0, ivaes);
real imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas;
calc_inc_diff(anno, start, 1, imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas);
// IVA detraibile
tokenPrec.get(1, ivadet);
calc_inc_diff(anno, start, 2, imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas);
}
/** Resto *****************************************************************************************************/
ivaes = ivaes + rowLim.get_real("R13");
ivadet = ivadet + rowLim.get_real("R12");
rettifiche = rettifiche + rowLim.get_real("R5");
varimp = varimp + rowLim.get_real("R17");
rimborsi = rimborsi + rowLim.get_real("R1");
impnover = impnover + rowLim.get_real("R18");
crespec = crespec + rowLim.get_real("R19");
vereff = vereff + rowLim.get_real("R8");
debprec = debprec + rowLim.get_real("S2");
appReal = ZERO;
// Credito periodo precedente
tokenPrec.get(2, appReal);
creprec = creprec + appReal;
// Credito anno precedente
creaprec = creaprec + rowLia.get_real("R0");
intliqtri = intliqtri + rowLim.get_real("R14");
accdov = accdov + rowLim.get_real("R11");
}
// Controllo debprec
// Calcolo prendendo dalla tabella %VER
TRectype rowVer = getVER(anno, start);
if(rowVer.empty() || rowVer.get_real("R5") == ZERO)
{
error_box("Non è stata valorizzato correttamente il campo \"Periodico\" in \"Versamenti ed interessi IVA\"");
return;
}
else
{
if(debprec > rowVer.get_real("R5")) // Se è maggiore di 25.82€ va azzerato
debprec = ZERO;
}
// Imposto tutti i campi
set(F_TOTOPATT, totopatt);
set(F_TOTOPATTXC, totopattxc);
set(F_TOTOPPAS, totoppas);
set(F_TOTOPPASXC, totoppasxc);
set(F_IVAES, ivaes);
set(F_IVAESXC, ivaesxc);
set(F_IVAESDIFF, ivaesdiff);
set(F_IVADET, ivadet);
set(F_IVADETXC, ivadetxc);
set(F_IVADETDIFF, ivadetdiff);
// Iva dovuta o a credito
if(ivaes - ivadet > ZERO)
{
ivadov = ivaes - ivadet;
set(F_IVADOV, ivadov);
set(F_IVADOVC, ZERO);
}
else
{
ivadovc = ivadet - ivaes;
set(F_IVADOV, ZERO);
set(F_IVADOVC, ivadovc);
}
set(F_DEBPREC, debprec);
set(F_CREPREC, creprec);
set(F_CREAPREC, creaprec);
//set(F_VEAUE, veaue); // Campi non calcolati, messi qua per un eventuale futuro
//set(F_CREIMP, creimp);
set(F_INTLIQTRI, intliqtri);
set(F_ACCDOV, accdov);
// Calcolo l'IVA da versare o a Credito
ivaver = (ivadov + debprec + intliqtri) - (ivadovc + creprec + creaprec + get_real(F_VEAUE) + get_real(F_CREIMP) + accdov);
ivaverc = (ivadovc + creprec + creaprec + get_real(F_VEAUE) + get_real(F_CREIMP) + accdov) - (ivadov + debprec + intliqtri);
if(ivaver >= ZERO)
set(F_IVAVER, ivaver);
else
set(F_IVAVERC, ivaverc);
set(F_RETTIFICHE, rettifiche);
set(F_VARIMP, varimp);
set(F_RIMBORSI, rimborsi);
set(F_IMPNOVER, impnover);
set(F_CRESPEC, crespec);
set(F_VEREFF, vereff);
// Azzero i booleani
for(int i = B_TOTOPATT; i <= B_VEREFF; i++)
{
set(i, "");
}
}
class ComLiqPerIva_app : public TRelation_application
{
private:
ComLiqPerIva_mask* _mask;
TRelation* _rel;
protected:
bool user_create();
bool user_destroy();
virtual TMask* get_mask(int mode) { return _mask; }
public:
virtual TRelation* get_relation() const {return (TRelation*)_rel;}
};
bool ComLiqPerIva_app::user_create()
{
_rel = new TRelation(LF_IVALIQ);
_mask = new ComLiqPerIva_mask;
set_search_field(F_ANNO);
return true;
}
bool ComLiqPerIva_app::user_destroy()
{
delete _mask;
return true;
}
int tf0200(int argc, char* argv[])
{
ComLiqPerIva_app app;
app.run(argc, argv, TR("Trasferimento dati liquidazione IVA"));
return 0;
}

64
src/tf/tf0200a.h Normal file
View File

@ -0,0 +1,64 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ANNO 103
#define F_MESE 104
#define F_TRIMESTRE 105
#define F_SUBFORNITURE 106
#define F_EVECC 107
#define F_TOTOPATT 108
#define F_TOTOPATTXC 109
#define F_TOTOPPAS 110
#define F_TOTOPPASXC 111
#define F_IVAES 112
#define F_IVAESXC 113
#define F_IVAESDIFF 114
#define F_IVADET 115
#define F_IVADETXC 116
#define F_IVADETDIFF 117
#define F_IVADOV 118
#define F_IVADOVC 119
#define F_DEBPREC 120
#define F_CREPREC 121
#define F_CREAPREC 122
#define F_VEAUE 123
#define F_CREIMP 124
#define F_INTLIQTRI 125
#define F_ACCDOV 126
#define F_IVAVER 127
#define F_IVAVERC 128
#define F_RETTIFICHE 129
#define F_VARIMP 130
#define F_RIMBORSI 131
#define F_IMPNOVER 132
#define F_CRESPEC 133
#define F_VEREFF 134
/* Booleani controllo modifiche (+50 rispetto al campo a cui si riferisce) */
#define B_TOTOPATT 158
#define B_TOTOPATTXC 159
#define B_TOTOPPAS 160
#define B_TOTOPPASXC 161
#define B_IVAES 162
#define B_IVAESXC 163
#define B_IVAESDIFF 164
#define B_IVADET 165
#define B_IVADETXC 166
#define B_IVADETDIFF 167
#define B_IVADOV 168
#define B_IVADOVC 169
#define B_DEBPREC 170
#define B_CREPREC 171
#define B_CREAPREC 172
#define B_VEAUE 173
#define B_CREIMP 174
#define B_INTLIQTRI 175
#define B_ACCDOV 176
#define B_IVAVER 177
#define B_IVAVERC 178
#define B_RETTIFICHE 179
#define B_VARIMP 180
#define B_RIMBORSI 181
#define B_IMPNOVER 182
#define B_CRESPEC 183
#define B_VEREFF 184

509
src/tf/tf0200a.uml Normal file
View File

@ -0,0 +1,509 @@
#include "tf0200a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_RECALC 2 2
BEGIN
PROMPT 1 1 "Elabora"
PICTURE TOOL_CONVERT
END
BUTTON DLG_EMAIL 2 2
BEGIN
PROMPT 1 1 "Invia"
PICTURE TOOL_EMAIL
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 1 ""
PICTURE 0
END
#include <relapbar.h>
ENDPAGE
PAGE "Impostazioni" 0 2 0 0
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Codice "
FLAGS "FZD"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
KEY 1
END
STRING F_RAGSOC 50
BEGIN
PROMPT 20 1 ""
USE LF_NDITTE KEY 2
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@60" RAGSOC
DISPLAY "Codice" CODDITTA
COPY OUTPUT F_CODDITTA
CHECKTYPE REQUIRED
FLAGS "D"
END
NUMBER F_ANNO 4
BEGIN
FIELD ANNO
PROMPT 1 2 "Anno "
USE LF_IVALIQ
INPUT ANNO F_ANNO
INPUT MESE F_MESE
INPUT TRIMESTRE F_TRIMESTRE
DISPLAY "Anno Liquid.IVA" ANNO
DiSPLAY "Mese" MESE
DISPLAY "Trimestre" TRIMESTRE
OUTPUT F_ANNO ANNO
OUTPUT F_MESE MESE
OUTPUT F_TRIMESTRE TRIMESTRE
KEY 1
CHECKTYPE REQUIRED
FLAGS "A"
WARNING "Inserire un anno di liquidazione"
END
NUMBER F_MESE 2
BEGIN
PROMPT 20 2 "Mese "
SHEET " |Mese@30"
INPUT F_MESE
OUTPUT F_MESE
ITEM "|"
ITEM "1|Gennaio"
ITEM "2|Febbraio"
ITEM "3|Marzo"
ITEM "4|Aprile"
ITEM "5|Maggio"
ITEM "6|Giugno"
ITEM "7|Luglio"
ITEM "8|Agosto"
ITEM "9|Settembre"
ITEM "10|Ottobre"
ITEM "11|Novembre"
ITEM "12|Dicembre"
ITEM "13|Mese mistico"
HELP "Mese dichiarazione, lasciare vuoto per inserirne uno nuovo"
FLAGS ""
KEY 1
FIELD MESE
END
NUMBER F_TRIMESTRE 2
BEGIN
PROMPT 40 2 "Trimestre "
SHEET " |Trimestre@30"
INPUT F_TRIMESTRE
OUTPUT F_TRIMESTRE
ITEM "|"
ITEM "1|Primo"
ITEM "2|Secondo"
ITEM "3|Terzo"
ITEM "4|Quarto"
HELP "Trimestre dichiarazione, lasciare vuoto per inserirne uno nuovo"
KEY 1
FLAGS ""
FIELD TRIMESTRE
END
BOOLEAN F_SUBFORNITURE
BEGIN
PROMPT 1 3 "Subforniture"
FIELD SUBFOR
FLAGS "D"
END
NUMBER F_EVECC 1
BEGIN
PROMPT 24 3 "Eventi eccezionali "
FIELD EVECC
FLAGS "D"
ENDPAGE
NUMBER F_TOTOPATT 16 2
BEGIN
PROMPT 1 4 "Totale op. attive "
FIELD TOTOPATT
FLAGS "D"
END
BOOLEAN B_TOTOPATT
BEGIN
PROMPT 45 4 ""
FIELD BTOTOPATT
FLAGS "D"
END
NUMBER F_TOTOPATTXC 16 2
BEGIN
PROMPT 1 5 "Totale op. attive x c."
FIELD TOTOPATTXC
FLAGS "D"
END
BOOLEAN B_TOTOPATTXC
BEGIN
PROMPT 45 5 ""
FIELD BTOTOPATTX
FLAGS "D"
END
NUMBER F_TOTOPPAS 16 2
BEGIN
PROMPT 1 6 "Totale op. passive "
FIELD TOTOPPAS
FLAGS "D"
END
BOOLEAN B_TOTOPPAS
BEGIN
PROMPT 45 6 ""
FIELD BTOTOPPAS
FLAGS "D"
END
NUMBER F_TOTOPPASXC 16 2
BEGIN
PROMPT 1 7 "Totale op. passive x c."
FIELD TOTOPPASXC
FLAGS "D"
END
BOOLEAN B_TOTOPPASXC
BEGIN
PROMPT 45 7 ""
FIELD BTOTOPPASX
FLAGS "D"
END
NUMBER F_IVAES 16 2
BEGIN
PROMPT 1 8 "IVA esigibile "
FIELD IVAES
FLAGS "D"
END
BOOLEAN B_IVAES
BEGIN
PROMPT 45 8 ""
FIELD BIVAES
FLAGS "D"
END
NUMBER F_IVAESXC 16 2
BEGIN
PROMPT 1 9 "IVA esigibile x c. "
FIELD IVAESXC
FLAGS "D"
END
BOOLEAN B_IVAESXC
BEGIN
PROMPT 45 9 ""
FIELD BIVAESXC
FLAGS "D"
END
NUMBER F_IVAESDIFF 16 2
BEGIN
PROMPT 1 10 "IVA esigibile diff "
FIELD IVAESDIFF
FLAGS "D"
END
BOOLEAN B_IVAESDIFF
BEGIN
PROMPT 45 10 ""
FIELD BIVAESDIFF
FLAGS "D"
END
NUMBER F_IVADET 16 2
BEGIN
PROMPT 1 11 "IVA detratta "
FIELD IVADET
FLAGS "D"
END
BOOLEAN B_IVADET
BEGIN
PROMPT 45 11 ""
FIELD BIVADET
FLAGS "D"
END
NUMBER F_IVADETXC 16 2
BEGIN
PROMPT 1 12 "IVA detratta x c. "
FIELD IVADETXC
FLAGS "D"
END
BOOLEAN B_IVADETXC
BEGIN
PROMPT 45 12 ""
FIELD BIVADETXC
FLAGS "D"
END
NUMBER F_IVADETDIFF 16 2
BEGIN
PROMPT 1 13 "IVA detratta diff "
FIELD IVADETDIFF
FLAGS "D"
END
BOOLEAN B_IVADETDIFF
BEGIN
PROMPT 45 13 ""
FIELD BIVADETDIF
FLAGS "D"
END
NUMBER F_IVADOV 16 2
BEGIN
PROMPT 1 14 "IVA dovuta "
FIELD IVADOV
FLAGS "D"
END
BOOLEAN B_IVADOV
BEGIN
PROMPT 45 14 ""
FIELD BIVADOV
FLAGS "D"
END
NUMBER F_IVADOVC 16 2
BEGIN
PROMPT 50 14 "o a credito"
FIELD IVADOVC
FLAGS "D"
END
BOOLEAN B_IVADOVC
BEGIN
PROMPT 80 14 ""
FIELD BIVADOVC
FLAGS "D"
END
NUMBER F_DEBPREC 16 2
BEGIN
PROMPT 1 15 "Debito precedente "
FIELD DEBPREC
FLAGS "D"
END
BOOLEAN B_DEBPREC
BEGIN
PROMPT 45 15 ""
FIELD BDEBPREC
FLAGS "D"
END
NUMBER F_CREPREC 16 2
BEGIN
PROMPT 1 16 "Credito precedente "
FIELD CREPREC
FLAGS "D"
END
BOOLEAN B_CREPREC
BEGIN
PROMPT 45 16 ""
FIELD BCREPREC
FLAGS "D"
END
NUMBER F_CREAPREC 16 2
BEGIN
PROMPT 1 17 "Credito anno precedente"
FIELD CREAPREC
FLAGS "D"
END
BOOLEAN B_CREAPREC
BEGIN
PROMPT 45 17 ""
FIELD BCREAPREC
FLAGS "D"
END
NUMBER F_VEAUE 16 2
BEGIN
PROMPT 1 18 "Versamenti auto UE "
FIELD VEAUE
FLAGS "D"
END
BOOLEAN B_VEAUE
BEGIN
PROMPT 45 18 ""
FIELD BVEAUE
FLAGS "D"
END
NUMBER F_CREIMP 16 2
BEGIN
PROMPT 1 19 "Crediti di imposta "
FIELD CREIMP
FLAGS "D"
END
BOOLEAN B_CREIMP
BEGIN
PROMPT 45 19 ""
FIELD BCREIMP
FLAGS "D"
END
NUMBER F_INTLIQTRI 16 2
BEGIN
PROMPT 1 20 "Interessi liq. trim. "
FIELD INTLIQTRI
FLAGS "D"
END
BOOLEAN B_INTLIQTRI
BEGIN
PROMPT 45 20 ""
FIELD BINTLIQTRI
FLAGS "D"
END
NUMBER F_ACCDOV 16 2
BEGIN
PROMPT 1 21 "Acconto dovuto "
FIELD ACCDOV
FLAGS "D"
END
BOOLEAN B_ACCDOV
BEGIN
PROMPT 45 21 ""
FIELD BACCDOV
FLAGS "D"
END
NUMBER F_IVAVER 16 2
BEGIN
PROMPT 1 22 "IVA da versare "
FIELD IVAVER
FLAGS "D"
END
BOOLEAN B_IVAVER
BEGIN
PROMPT 45 22 ""
FIELD BIVAVER
FLAGS "D"
END
NUMBER F_IVAVERC 16 2
BEGIN
PROMPT 50 22 "o a credito"
FIELD IVAVERC
FLAGS "D"
END
BOOLEAN B_IVAVERC
BEGIN
PROMPT 80 22 ""
FIELD BIVAVERC
FLAGS "D"
END
NUMBER F_RETTIFICHE 16 2
BEGIN
PROMPT 1 23 "Rettifiche "
FIELD RETTIFICHE
FLAGS "D"
END
BOOLEAN B_RETTIFICHE
BEGIN
PROMPT 45 23 ""
FIELD BRETTIFICH
FLAGS "D"
END
NUMBER F_VARIMP 16 2
BEGIN
PROMPT 1 24 "Variazioni d'imposta "
FIELD VARIMP
FLAGS "D"
END
BOOLEAN B_VARIMP
BEGIN
PROMPT 45 24 ""
FIELD BVARIMP
FLAGS "D"
END
NUMBER F_RIMBORSI 16 2
BEGIN
PROMPT 1 25 "Rimborsi "
FIELD RIMBORSI
FLAGS "D"
END
BOOLEAN B_RIMBORSI
BEGIN
PROMPT 45 25 ""
FIELD BRIMBORSI
FLAGS "D"
END
NUMBER F_IMPNOVER 16 2
BEGIN
PROMPT 1 26 "Imposta non versata "
FIELD IMPNOVER
FLAGS "D"
END
BOOLEAN B_IMPNOVER
BEGIN
PROMPT 45 26 ""
FIELD BIMPNOVER
FLAGS "D"
END
NUMBER F_CRESPEC 16 2
BEGIN
PROMPT 1 27 "Crediti speciali "
FIELD CRESPEC
FLAGS "D"
END
BOOLEAN B_CRESPEC
BEGIN
PROMPT 45 27 ""
FIELD BCRESPEC
FLAGS "D"
END
NUMBER F_VEREFF 16 2
BEGIN
PROMPT 1 28 "Versamenti effettuati "
FIELD VEREFF
FLAGS "D"
END
BOOLEAN B_VEREFF
BEGIN
PROMPT 45 28 ""
FIELD BVEREFF
FLAGS "D"
END
ENDMASK

281
src/tf/tf0500.cpp Normal file
View File

@ -0,0 +1,281 @@
#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 "tf"
#define CODICE_FORNITURA "IVP17"
const TRectype getAnagDitta()
{
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 getLim(int anno, int mese)
{
TString key; key << anno;
if(mese < 10)
key << "0" << mese;
else
key << mese;
return cache().get("LIM", key);
}
const TRectype getLiq(int anno, int mese)
{
TString key; key << anno << "|";
if(mese < 10)
key << "0" << mese;
else
key << mese;
return cache().get(LF_IVALIQ, key);
}
TString formatCurrency(TString value)
{
real app(value);
if(app == ZERO)
return ",00";
else
return TCurrency(app).string();
}
class TIvaSend_msk : public TAutomask
{
bool mese;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
bool isMese() { return mese; }
TIvaSend_msk() : TAutomask("tf0500a"){}
};
bool TIvaSend_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch(o.dlg())
{
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'è una liquidazione aperta, così 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;
}
return true;
}
class TIvaSend_app : public TSkeleton_application
{
void generateNSend(TIvaSend_msk& msk) { generate(msk); send(); }
void generate(TIvaSend_msk& msk);
TToken_string getTestata(TIvaSend_msk& msk);
void send();
public:
virtual void main_loop();
};
void TIvaSend_app::generate(TIvaSend_msk& msk)
{
ofstream file;
TFilename path(msk.get(F_PATH));
TRectype rowLim = getLim(msk.get_int(F_ANNO), msk.isMese() ? msk.get_int(F_DAMESE) : msk.get_int(F_DATRIMESTRE) * 3);
TRectype rowLiq = getLiq(msk.get_int(F_ANNO), msk.isMese() ? msk.get_int(F_DAMESE) : msk.get_int(F_DATRIMESTRE) * 3);
// Decido di utilizzare I10 come numero progressivo di trasmissione
int prog = rowLim.get_int("I10"); prog++;
TString nomeFile; nomeFile << "IT" << getAnagDitta().get("PAIV") << TIPO_FILE << prog << ".csv";
path.add(nomeFile);
file.open(path, ios::out);
if(!file.is_open())
error_box(TR("Impossibile aprire il file alla posizione %s", path));
TToken_string testata(getTestata(msk));
int start = msk.isMese() ? msk.get_int(F_DAMESE) : msk.get_int(F_DATRIMESTRE);
int end = msk.isMese() ? msk.get_int(F_AMESE) : msk.get_int(F_ATRIMESTRE);
for(; start <= end; start++)
{
TToken_string riga(testata);
if(msk.isMese())
{
riga.add(start); // Mese
riga.add(""); // Trimestre
}
else
{
riga.add(""); // Mese
riga.add(start); // Trimestre
}
char subfor = rowLiq.get_bool("SUBFOR") ? 'X' : '\0';
riga.add(subfor); // Flag Subfornitura
riga.add(""); // Eventi eccezionali
riga.add(formatCurrency(rowLiq.get("TOTOPATT"))); // Totale operazioni attive (al netto dell'IVA)
riga.add(formatCurrency(rowLiq.get("TOTOPPAS"))); // Totale operazioni passive (al netto dell'IVA)
real ivaes = rowLiq.get_real("IVAES") + rowLiq.get_real("IVAESXC") + rowLiq.get_real("IVAESDIFF");
riga.add(formatCurrency(ivaes.string())); // IVA esigibile
real ivadet = rowLiq.get_real("IVADET") + rowLiq.get_real("IVADETXC") + rowLiq.get_real("IVADETDIFF");
riga.add(formatCurrency(ivadet.string())); // IVA detratta
riga.add(formatCurrency(rowLiq.get("IVADOV"))); // IVA dovuta
riga.add(formatCurrency(rowLiq.get("IVADOVC"))); // IVA a credito VP6 col 2
riga.add(formatCurrency(rowLiq.get("DEBPREC"))); // Debito periodo precedente
riga.add(formatCurrency(rowLiq.get("CREPREC"))); // Credito periodo precedente
riga.add(formatCurrency(rowLiq.get("CREAPREC"))); // Credito anno precedente
riga.add(formatCurrency(rowLiq.get("VEAUE"))); // Versamenti auto UE
riga.add(formatCurrency(rowLiq.get("CREIMP"))); // Crediti di imposta
riga.add(formatCurrency(rowLiq.get("INTLIQTRI"))); // Interessi dovuti per liquidazioni trimestrali
riga.add(formatCurrency(rowLiq.get("ACCDOV"))); // Acconto dovuto
riga.add(formatCurrency(rowLiq.get("IVAVER"))); // IVA da versare
riga.add(formatCurrency(rowLiq.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
rowLim.put("I14", prog);
if(rowLim.rewrite(TLocalisamfile(LF_TAB)) != NOERR)
{
error_box("Errore aggiornamento progressivo");
}
}
TToken_string TIvaSend_app::getTestata(TIvaSend_msk& msk)
{
TToken_string testata; // Token string di virgole
testata.add(CODICE_FORNITURA); // 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 anaDitta = getAnagDitta();
testata.add(anaDitta.get("COFI")); // Codice fiscale
testata.add(anaDitta.get("PAIV")); // Partita IVA
testata.add(""); // P.IVA Controllante
testata.add(""); // Flag Liq. gruppo
testata.add(""); // Flag firma comunicazione
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());
return testata;
}
void TIvaSend_app::send()
{
TFilename tmp;
tmp = TFBASE"\\SiaggTFCAMPO.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"), (const char*)tmp);
xvt_fsys_set_dir(&old_dir);
}
void TIvaSend_app::main_loop()
{
TIvaSend_msk msk;
while(msk.run() == K_ENTER)
{
generateNSend(msk);
}
}
int tf0500(int argc, char* argv[])
{
TIvaSend_app app;
app.run(argc, argv, TR("Trasferimento dati liquidazione IVA"));
return 0;
}

8
src/tf/tf0500a.h Normal file
View File

@ -0,0 +1,8 @@
#define F_PATH 101
#define F_CODDITTA 102
#define F_RAGSOC 103
#define F_ANNO 104
#define F_DAMESE 105
#define F_AMESE 106
#define F_DATRIMESTRE 107
#define F_ATRIMESTRE 108

130
src/tf/tf0500a.uml Normal file
View File

@ -0,0 +1,130 @@
#include "tf0500a.h"
TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
ENDPAGE
PAGE "Impostazioni" 0 2 0 0
STRING F_PATH 255 45
BEGIN
PROMPT 0 1 "Cartella "
DSELECT
CHECKTYPE REQUIRED
FLAGS "M"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 2 "Codice "
FLAGS "FZD"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
KEY 1
END
STRING F_RAGSOC 50
BEGIN
PROMPT 20 2 ""
USE LF_NDITTE KEY 2
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@60" RAGSOC
DISPLAY "Codice" CODDITTA
COPY OUTPUT F_CODDITTA
CHECKTYPE REQUIRED
FLAGS "D"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno "
USE LF_IVALIQ
INPUT ANNO F_ANNO
DISPLAY "Anno Liquid.IVA" ANNO
DiSPLAY "Mese" MESE
DISPLAY "Trimestre" TRIMESTRE
OUTPUT F_ANNO ANNO
OUTPUT F_DAMESE MESE
OUTPUT F_DATRIMESTRE TRIMESTRE
CHECKTYPE REQUIRED
FLAGS ""
WARNING "Inserire un anno di liquidazione"
END
NUMBER F_DAMESE 2
BEGIN
PROMPT 20 3 "Da mese "
SHEET " |Mese@30"
ITEM "|"
ITEM "1|Gennaio"
ITEM "2|Febbraio"
ITEM "3|Marzo"
ITEM "4|Aprile"
ITEM "5|Maggio"
ITEM "6|Giugno"
ITEM "7|Luglio"
ITEM "8|Agosto"
ITEM "9|Settembre"
ITEM "10|Ottobre"
ITEM "11|Novembre"
ITEM "12|Dicembre"
ITEM "13|Mese mistico"
HELP "Mese dichiarazione, lasciare vuoto per inserirne uno nuovo"
FLAGS "D"
END
NUMBER F_AMESE 2
BEGIN
PROMPT 40 3 "A mese "
SHEET " |Mese@30"
ITEM "|"
ITEM "1|Gennaio"
ITEM "2|Febbraio"
ITEM "3|Marzo"
ITEM "4|Aprile"
ITEM "5|Maggio"
ITEM "6|Giugno"
ITEM "7|Luglio"
ITEM "8|Agosto"
ITEM "9|Settembre"
ITEM "10|Ottobre"
ITEM "11|Novembre"
ITEM "12|Dicembre"
ITEM "13|Mese mistico"
HELP "Mese dichiarazione, lasciare vuoto per inserirne uno nuovo"
FLAGS "D"
END
NUMBER F_DATRIMESTRE 2
BEGIN
PROMPT 20 4 "Da trimestre "
SHEET " |Trimestre@30"
ITEM "|"
ITEM "1|Primo"
ITEM "2|Secondo"
ITEM "3|Terzo"
ITEM "4|Quarto"
HELP "Trimestre dichiarazione, lasciare vuoto per inserirne uno nuovo"
FLAGS "D"
END
NUMBER F_ATRIMESTRE 2
BEGIN
PROMPT 40 4 "A trimestre "
SHEET " |Trimestre@30"
ITEM "|"
ITEM "1|Primo"
ITEM "2|Secondo"
ITEM "3|Terzo"
ITEM "4|Quarto"
HELP "Trimestre dichiarazione, lasciare vuoto per inserirne uno nuovo"
FLAGS "D"
END
ENDPAGE
ENDMASK

8
src/tf/tfmenu.men Normal file
View File

@ -0,0 +1,8 @@
[TFMENU_001]
Caption = "Trasferimento Fatture"
Picture = <ve01>
Module = tf
Flags = "F"
//Item_01 = "Trasferimento Fatture", "tf0 -0", "F"
Item_02 = "Liquidazione IVA Periodica", "tf0 -1", "F"
Item_03 = "Invio Liquidazione IVA Periodica", "tf -4", "F"