Patch level : 12.0 1040

Files correlati     : tutto in
Commento            :

Aggiornato il modulo intra

Interno :

Primo rilascio mancano  la generazione riepiloghi e l'invio delle righe di servizio
This commit is contained in:
Alessandro Bonazzi 2021-03-16 13:20:02 +01:00
parent 180199badc
commit 8ee685d4b5
23 changed files with 1510 additions and 443 deletions

BIN
src/in/AllegatoXII.pdf Normal file

Binary file not shown.

View File

@ -31,4 +31,4 @@ MODEROG|1|1|0|Modalit
MODINC|1|1|0|Modalità di incasso <B>onifico, <A>ccredito o <X> Altro
ISOPAG|1|2|0|Codice Iso Paese di pagamento
1
TIPOINTRA+TIPO+ANNO+PERIODO+NUMRIG|
TIPO+ANNO+PERIODO+NUMRIG|

View File

@ -7,11 +7,12 @@ int main(int argc, char** argv)
const int n = (argc > 1) ? (argv[1][1]-'0') : 0;
switch (n)
{
case 0 : in0100(argc, argv); break; // stampa riepiloghi
case 1 : in0200(argc, argv); break; // generazione scambi.cee
case 5 : in0600(argc, argv); break; // gestione riepiloghi
case 6 : in0700(argc, argv); break; // gestione rettifiche
default: in0500(argc, argv); break; // gestione movimenti
case 0 : in0100(argc, argv); break; // stampa riepiloghi
case 1 : in0200(argc, argv); break; // generazione Intra 1/2
case 2 : in0300(argc, argv); break; // generazione Intra 12/13
case 5 : in0600(argc, argv); break; // gestione riepiloghi
case 6 : in0700(argc, argv); break; // gestione rettifiche
default: in0500(argc, argv); break; // gestione movimenti
}
exit(0);
return 0;

View File

@ -1,5 +1,6 @@
int in0100(int argc, char* argv[]);
int in0200(int argc, char* argv[]);
int in0300(int argc, char* argv[]);
int in0500(int argc, char* argv[]);
int in0600(int argc, char* argv[]);
int in0700(int argc, char* argv[]);

View File

@ -10,35 +10,12 @@
#include <nditte.h>
#include <anagr.h>
#include <riepintra.h>
///////////////////////////////////////////////////////////
// TRecord_intra
///////////////////////////////////////////////////////////
struct TIntra_context
{
char _tipo;
long _progr;
char _freq;
int _anno;
int _periodo;
long _righe_riep;
real _totale_riep;
long _righe_rett;
real _totale_rett;
unsigned long _written;
unsigned long _disksize;
TIntra_context();
};
TIntra_context::TIntra_context()
{
_tipo = 'C'; _freq = 'T'; _anno = 1999; _periodo = 1;
_progr = _righe_riep = _righe_rett = 0L;
_written = _disksize = 0L;
}
class TRecord_intra : public TString
{
int _ndec;
@ -124,7 +101,7 @@ void TRecord_intra::put(char chr, int pos)
void TRecord_intra::reset(const TIntra_context& ic)
{
spaces();
put("EUROA", 1, 5);
put("EUROX", 1, 5);
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
TString16 cod;
cod.format("%c|%ld", ditta.get_char(NDT_TIPOA), ditta.get_long(NDT_CODANAGR));
@ -185,34 +162,40 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
reset_data();
put(rec.get_long("NUMRIG"), 24, 5);
const char tipointra = rec.get_char("TIPOINTRA");
const char tipo = rec.get_char("TIPO");
switch (tipo)
CHECK(tipointra == ic._tipointra, "Tipo Intra non previsto");
if (tipointra == 'B')
{
case 'A':
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
put(rec.get_char("NATURA"), 69);
put(rec.get("NOMENCL").mid(0,4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get("NOMENCL").mid(4,2), 74, 2, "Z");
put(rec.get("NOMENCL").mid(6,2), 76, 2, "Z");
if (ic._freq == 'M')
switch (tipo)
{
put(rec.get_real("MASSAKG"), 78, 10, 0);
put(rec.get_real("MASSAUMS"), 88, 10, 0);
put(rec.get_real("VALSTAT"), 98, 13, _ndec);
put(rec.get_char("CONSEGNA"), 111);
put(rec.get_char("TRASPORTO"),112);
put(rec.get("PAESE"), 113, 2);
put(rec.get("PAESEORIG"), 115, 2);
put(rec.get("PROV"), 117, 2);
}
else
put("", 78, 100);
break;
case 'B':
case 'A':
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
put(rec.get_char("NATURA"), 69);
put(rec.get("NOMENCL").mid(0, 4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get("NOMENCL").mid(4, 2), 74, 2, "Z");
put(rec.get("NOMENCL").mid(6, 2), 76, 2, "Z");
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 78, 10, 0);
put(rec.get_real("MASSAUMS"), 88, 10, 0);
put(rec.get_real("VALSTAT"), 98, 13, _ndec);
put(rec.get_char("CONSEGNA"), 111);
put(rec.get_char("TRASPORTO"), 112);
put(rec.get("PAESE"), 113, 2);
put(rec.get("PAESEORIG"), 115, 2);
put(rec.get("PROV"), 117, 2);
}
else
put("", 78, 100);
break;
case 'B':
{
put('2', 23);
if (ic._freq == 'M')
@ -223,43 +206,43 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get("PERETT")[1], 31);
else
put('0', 31);
put(rec.get("ANNORETT").right(2), 32, 2, "RZ");
put(rec.get("STATO"), 34, 2);
put(rec.get("PIVA"), 36, 12);
put(rec.get("SEGNORETT"), 48, 1);
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 62, 13);
put(rec.get_char("NATURA"), 75);
put(rec.get("NOMENCL").mid(0,4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get("NOMENCL").mid(4,2), 80, 2, "Z");
put(rec.get("NOMENCL").mid(6,2), 82, 2, "Z");
put(rec.get("ANNORETT").right(2), 32, 2, "RZ");
put(rec.get("STATO"), 34, 2);
put(rec.get("PIVA"), 36, 12);
put(rec.get("SEGNORETT"), 48, 1);
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 62, 13);
put(rec.get_char("NATURA"), 75);
put(rec.get("NOMENCL").mid(0, 4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get("NOMENCL").mid(4, 2), 80, 2, "Z");
put(rec.get("NOMENCL").mid(6, 2), 82, 2, "Z");
if (ic._freq == 'M')
put(rec.get_real("VALSTAT"), 84, 13, _ndec);
put(rec.get_real("VALSTAT"), 84, 13, _ndec);
else
put("", 84, 13);
}
break;
case 'C':
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_char("NATURA"), 56);
put(rec.get("NOMENCL"), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 65, 10);
put(rec.get_real("MASSAUMS"), 75, 10);
put(rec.get_real("VALSTAT"), 85, 13, _ndec);
put(rec.get_char("CONSEGNA"), 98);
put(rec.get_char("TRASPORTO"), 99);
put(rec.get("PAESE"), 100, 2);
put(rec.get("PROV"), 102, 2);
}
else
put("", 65, 100);
break;
case 'D':
case 'C':
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_char("NATURA"), 56);
put(rec.get("NOMENCL"), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 65, 10);
put(rec.get_real("MASSAUMS"), 75, 10);
put(rec.get_real("VALSTAT"), 85, 13, _ndec);
put(rec.get_char("CONSEGNA"), 98);
put(rec.get_char("TRASPORTO"), 99);
put(rec.get("PAESE"), 100, 2);
put(rec.get("PROV"), 102, 2);
}
else
put("", 65, 100);
break;
case 'D':
{
put('2', 23);
if (ic._freq == 'M')
@ -277,16 +260,87 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(abs(rec.get_real("AMMLIRE")), 49, 13, _ndec);
put(rec.get("NATURA"), 62, 1);
put(rec.get("NOMENCL"), 63, 8, "Z"); // il campo NON viene spezzato in 3 pezzi
if (ic._freq == 'M')
put(abs(rec.get_real("VALSTAT")), 71, 13, _ndec);
else
put("", 71, 13);
}
break;
default:
NFCHECK("Record di tipo sconosciuto: %c", tipo);
default:
NFCHECK("Record di tipo sconosciuto: %c", tipo);
break;
}
}
else
{
switch (tipo)
{
case 'A':
put('3', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
// put(numero fattura, 69, 15);
// put(data fattura, 84, 6);
// put(codice servizio, 90, 6);
// put(modalità di erogazione, 96);
// put(modalità di incasso, 97);
// put(codice paese di pagamento, 98, 2);
break;
case 'B':
{
put('4', 23);
// put(sezione doganale, 29, 6);
put(rec.get("ANNORETT").right(2), 35, 2, "RZ");
// put(protocollo rettifica, 37, 6, "RZ");
// put(progressivo rettifica, 43, 5, "RZ");
put(rec.get("STATO"), 48, 2);
put(rec.get("PIVA"), 50, 12);
put(rec.get_real("AMMLIRE"), 62, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 75, 13);
// put(numero fattura, 88, 15);
// put(data fattura, 103, 6);
// put(codice servizio, 109, 6);
// put(modalità di erogazione, 115);
// put(modalità di incasso, 116);
// put(codice paese di pagamento, 117, 2);
}
break;
case 'C':
put('3', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
// put(numero fattura, 56, 15);
// put(data fattura, 71, 6);
// put(codice servizio, 77, 6);
// put(modalità di erogazione, 83);
// put(modalità di incasso,84);
// put(codice paese di pagamento, 85, 2);
break;
case 'D':
{
put('4', 23);
// put(sezione doganale, 29, 6);
put(rec.get("ANNORETT").right(2), 35, 2, "RZ");
// put(protocollo rettifica, 37, 6, "RZ");
// put(progressivo rettifica, 43, 5, "RZ");
put(rec.get("STATO"), 48, 2);
put(rec.get("PIVA"), 50, 12);
put(rec.get_real("AMMLIRE"), 2, 13, _ndec);
// put(numero fattura, 75, 15);
// put(data fattura, 90, 6);
// put(codice servizio, 96, 6);
// put(modalità di erogazione, 102);
// put(modalità di incasso, 103);
}
break;
default:
NFCHECK("Record di tipo sconosciuto: %c", tipo);
break;
}
}
}
@ -303,10 +357,10 @@ TRecord_intra::TRecord_intra() : TString(132), _ndec(0)
///////////////////////////////////////////////////////////
// TDischetto_mask
// TInvioIntra1_2_mask
///////////////////////////////////////////////////////////
class TDischetto_mask : public TIntra_mask
class TInvioIntra1_2_mask : public TIntra_mask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -315,17 +369,15 @@ protected:
virtual int anno() const { return get_int(F_ANNO); }
TRecnotype calcola_totale(TCursor& cur, real& tot) const;
bool write_record(ofstream& out, const TRecord_intra& rec, TIntra_context& ic);
void proponi_numero();
public:
void genera_dischetto(char tip, int mode = 0);
void genera(char tipointra, char tipo);
TDischetto_mask();
TInvioIntra1_2_mask::TInvioIntra1_2_mask() : TIntra_mask("in0200a") {}
};
void TDischetto_mask::proponi_numero()
void TInvioIntra1_2_mask::proponi_numero()
{
const char tip = tipo();
int a = anno(), p = periodo();
@ -347,11 +399,10 @@ void TDischetto_mask::proponi_numero()
if (anno() > a || periodo() > p)
set(F_NUMERO, d+1);
else
set(F_NUMERO, d == 0 ? 1L : d);
set(F_LAST, d);
set(F_NUMERO, 1L);
}
bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
bool TInvioIntra1_2_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
@ -401,7 +452,7 @@ bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jo
return TIntra_mask::on_field_event(o, e, jolly);
}
TRecnotype TDischetto_mask::calcola_totale(TCursor& cur, real& tot) const
TRecnotype TInvioIntra1_2_mask::calcola_totale(TCursor& cur, real& tot) const
{
TWait_cursor arrow;
const TRecnotype items = cur.items();
@ -423,38 +474,12 @@ TRecnotype TDischetto_mask::calcola_totale(TCursor& cur, real& tot) const
return items;
}
bool TDischetto_mask::write_record(ofstream& out, const TRecord_intra& rec, TIntra_context& ic)
{
out << rec;
bool good = out.good() != 0;
if (good)
ic._written += rec.len()+2;
if (ic._written >= ic._disksize)
{
out.close();
TFilename name = get(F_PATH);
name.add("scambi.cee");
out.open(name);
if (out)
{
ic._written = 0;
good = true;
}
}
if (!good)
error_box(TR("Errore di scrittura su disco: ripetere l'operazione."));
return good;
}
// mode 0 = ask; 1 = append; 2 = remove
void TDischetto_mask::genera_dischetto(char tip, int mode)
void TInvioIntra1_2_mask::genera(char tipointra, char tipo)
{
TIntra_context ic;
ic._tipo = tip;
ic._tipointra = tipointra;
ic._tipo = tipo;
ic._anno = anno();
ic._freq = frequenza(ic._anno);
ic._periodo = periodo();
@ -468,7 +493,7 @@ void TDischetto_mask::genera_dischetto(char tip, int mode)
if (exist)
{
const char* ac = tip == 'A' ? TR("acquisti") : TR("cessioni");
const char* ac = tipo == 'A' ? TR("acquisti") : TR("cessioni");
if (!yesno_box(FR("Il file %s del periodo indicato è già stato generato:\n"
"Si desidera proseguire ugualmente?"), ac))
return;
@ -476,6 +501,8 @@ void TDischetto_mask::genera_dischetto(char tip, int mode)
TRelation rel(LF_RIEPRETT);
TRectype filter(LF_RIEPRETT);
filter.put("TIPOINTRA", ic._tipointra);
filter.put("TIPO", ic._tipo);
filter.put("ANNO", ic._anno);
filter.put("PERIODO", periodo_str());
@ -488,34 +515,25 @@ void TDischetto_mask::genera_dischetto(char tip, int mode)
ic._righe_rett = calcola_totale(rett, ic._totale_rett);
TFilename name = get(F_PATH);
name.add("scambi.cee");
if (name.exist())
{
bool do_remove = (mode == 2);
if (mode == 0)
{
do_remove = yesno_box(FR("Il file %s esiste già: si desiderla eliminarlo?\n"
"Rispondendo SI i dati sul file verranno azzerati.\n"
"Rispondendo NO i dati verranno accodati a quelli già presenti"),
(const char*)name);
}
if (do_remove)
xvt_fsys_remove_file(name);
}
TFilename name = get(F_PATH);
TString filename(get(F_CODUA));
filename << format("%02d%02d%02d", today.day(), today.month(), get_int(F_NUMERO));
name.add(filename);
if (name.exist() && yesno_box(FR("Il file %s esiste già: si desiderla sostituirlo ?\n"), (const char*)name))
return;
ofstream out(name, ios::out | ios::app);
if (!out)
{
cantwrite_box(name);
return;
}
ic._disksize = xvt_fsys_get_disk_size(name, 'b') - (64L*1024L);
ic._written = 0;
const long total = ic._righe_riep + ic._righe_rett;
TProgress_monitor pi(total, TR("Generazione scambi.cee"), false);
TProgress_monitor pi(total, TR("Generazione Intra 1/2"), false);
TRecord_intra rec;
rec.genera_testata(ic);
out << rec;
@ -525,70 +543,71 @@ void TDischetto_mask::genera_dischetto(char tip, int mode)
{
pi.add_status();
rec.put(riep.curr(), ic);
if (!write_record(out, rec, ic))
return;
out << rec;
}
rec.reset_data();
for (rett = 0L; rett.pos() < ic._righe_rett; ++rett)
{
pi.add_status();
rec.put(riep.curr(), ic);
if (!write_record(out, rec, ic))
return;
out << rec;
}
codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
ird.put("CODTAB", codtab);
ird.put("I0", ic._progr); // Numero progressivo dischetto
// ird.put("I1", ??? );
ird.put("I2", ic._righe_riep);
ird.put("I3", ic._righe_rett);
ird.put("R0", ic._totale_riep);
ird.put("R1", ic._totale_rett);
if (exist)
ird.rewrite();
else
ird.write();
ird.rewrite_write();
set(F_NUMERO, ic._progr + 1);
TString msg("Generato il file ");
msg << name;
message_box(name);
}
TDischetto_mask::TDischetto_mask()
: TIntra_mask("in0200a")
{ }
///////////////////////////////////////////////////////////
// TDischetto_app
// TInvioIntra1_2_app
///////////////////////////////////////////////////////////
class TDischetto_app : public TSkeleton_application
class TInvioIntra1_2_app : public TSkeleton_application
{
protected:
virtual void main_loop();
};
void TDischetto_app::main_loop()
void TInvioIntra1_2_app::main_loop()
{
TInvioIntra1_2_mask m;
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_INTRA, LF_RINTRA, LF_RIEPRETT, 0);
TDischetto_mask m;
m.load();
m.set(F_PROGGIORN, 1);
while (m.run() == K_ENTER)
{
const char tip = m.tipo();
if (tip == 'T')
{
m.genera_dischetto('A', 2);
m.genera_dischetto('C', 1);
m.genera('B', 'C');
m.genera('B', 'A');
m.genera('S', 'C');
m.genera('S', 'A');
}
else
m.genera_dischetto(tip);
{
m.genera('B', tip);
m.genera('S', tip);
}
}
m.save();
}
int in0200(int argc, char* argv[])
{
TDischetto_app a;
a.run(argc, argv, TR("Generazione scambi.cee"));
TInvioIntra1_2_app a;
a.run(argc, argv, TR("Generazione Intra 1/2"));
return 0;
}

View File

@ -4,7 +4,8 @@
#define F_PERIODO_M 103
#define F_PERIODO_T 104
#define F_PERIODO_A 105
#define F_CODUA 106
#define F_NUMERO 107
#define F_LAST 108
#define F_PROGGIORN 108
#define F_PATH 109

View File

@ -1,68 +1,5 @@
#include "in0200a.h"
PAGE "Generazione file scambi.cee" -1 -1 43 7
LIST F_TIPO 1 10
BEGIN
PROMPT 1 1 "Tipo riepilogo "
ITEM "A|Acquisti"
ITEM "C|Cessioni"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 30 1 "Anno "
FLAGS "AU"
END
LIST F_PERIODO_M 2 17
BEGIN
PROMPT 1 2 "Periodo "
FLAGS "AM"
FIELD PERIODO
END
LIST F_PERIODO_T 2 17
BEGIN
PROMPT 1 2 "Periodo "
ITEM "01|Gennaio-Marzo"
MESSAGE COPY,F_PERIODO_M
ITEM "02|Aprile-Giugno"
MESSAGE COPY,F_PERIODO_M
ITEM "03|Luglio-Settembre"
MESSAGE COPY,F_PERIODO_M
ITEM "04|Ottobre-Dicembre"
MESSAGE COPY,F_PERIODO_M
END
LIST F_PERIODO_A 2 17
BEGIN
PROMPT 1 2 "Periodo "
ITEM "01|Annuale"
MESSAGE COPY,F_PERIODO_M
END
NUMBER F_NUMERO 6
BEGIN
PROMPT 1 3 "Dischetto "
CHECKTYPE REQUIRED
END
NUMBER F_LAST 6
BEGIN
PROMPT 26 3 "Ultimo "
FLAGS "D"
END
STRING F_PATH 50 29
BEGIN
PROMPT 1 5 "Cartella "
DSELECT
CHECKTYPE REQUIRED
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 2 2
@ -81,4 +18,74 @@ END
ENDPAGE
PAGE "Intra 1/2" 0 2 0 0
LIST F_TIPO 1 10
BEGIN
PROMPT 1 1 "Tipo riepilogo "
ITEM "A|Acquisti"
ITEM "C|Cessioni"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno "
FLAGS "AU"
END
LIST F_PERIODO_M 2 17
BEGIN
PROMPT 1 5 "Periodo "
FLAGS "AM"
FIELD PERIODO
END
LIST F_PERIODO_T 2 17
BEGIN
PROMPT 1 5 "Periodo "
ITEM "01|Gennaio-Marzo"
MESSAGE COPY,F_PERIODO_M
ITEM "02|Aprile-Giugno"
MESSAGE COPY,F_PERIODO_M
ITEM "03|Luglio-Settembre"
MESSAGE COPY,F_PERIODO_M
ITEM "04|Ottobre-Dicembre"
MESSAGE COPY,F_PERIODO_M
END
LIST F_PERIODO_A 2 17
BEGIN
PROMPT 1 5 "Periodo "
ITEM "01|Annuale"
MESSAGE COPY,F_PERIODO_M
END
STRING F_CODUA 4
BEGIN
PROMPT 1 7 "Codice UA "
VALIDATE FIXLEN_FUNC 4
CHECKTYPE REQUIRED
END
NUMBER F_NUMERO 6
BEGIN
PROMPT 1 9 "Prog.invio "
CHECKTYPE REQUIRED
END
NUMBER F_PROGGIORN 2
BEGIN
PROMPT 30 9 "Prog.giornaliero "
CHECKTYPE REQUIRED
END
STRING F_PATH 50 29
BEGIN
PROMPT 1 11 "Cartella "
DSELECT
CHECKTYPE REQUIRED
END
ENDPAGE
ENDMASK

695
src/in/in0300.cpp Normal file
View File

@ -0,0 +1,695 @@
#include <applicat.h>
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <text.h>
#include <tabutil.h>
#include "../cg/cglib.h"
#include "in0.h"
#include "in0300a.h"
#include "inlib01.h"
#include <nditte.h>
#include <anagr.h>
#include <anagiu.h>
#include <anafis.h>
#include <comuni.h>
#include <intra.h>
#include <rintra.h>
#include <riepintra.h>
#define ATIPOFOR "ATipoFor"
#define ACFFOR "ACFFor"
#define BCFDICH "BCFDich"
#define BPROGMODULO "BProgModulo"
#define BSPUTENTE "BSpUtente"
#define BSPUTENTEID "BSpUtenteID"
#define BCFPRODSW "BCFProdSw"
#define BFLAGCONF "BFlagConf"
#define BUFFCOMP "BuffComp"
#define BANNORIF "BAnnoRif"
#define BMESERIF "BMeseRif"
#define BCORRTERM "BCorrTerm"
#define BPI "BPI"
#define BCODATT "BCodAtt"
#define BEVECC "BEvEcc"
#define BCOGNOME "BCognome"
#define BNOME "BNome"
#define BCOMNASC "BProvNasc"
#define BPROVNASC "BProvNasc"
#define BDATANASC "BDataNasc"
#define BSESSO "BSesso"
#define BDENOM "BDenom"
#define BNATGIU "BNatGiu"
#define BCOMRF "BComRF"
#define BPRRF "BPrRF"
#define BINDRF "BindRF"
#define BCAPRF "BCAPRF"
#define BCODCOMRF "BCodComRF"
#define BCFRAPP "CFRapp"
#define BCODCAR "BCodCar"
#define BPIDICH "BCFDich"
#define BCODSTAEST "BCodStaEst"
#define BSTAFED "BStaFed"
#define BLOCEST "BLocEst"
#define BINDEST "BIndEst"
#define BCOGNOMERAPP "BCognomeRapp"
#define BNOMERAPP "BNomeRapp"
#define BSESSORAPP "BSessoRapp"
#define BDATANASCRAPP "BDataNascRapp"
#define BCOMNASCRAPP "BComNascRapp"
#define BPROVNASCRAPP "BProvNascRapp"
#define BTELRAPP "BTelRapp"
#define BFIRMADICH "BFirmaDich"
#define BCFINT "BCFInt"
#define BISCRCAF "BIscrCAF"
#define BSOGGDICH "BSoggDich"
#define BDATAIMP "BDataImp"
#define BFIRMAINT "BFirmaInt"
#define CCFCONTR "CCFContr"
#define CPROGMODULO "CProgModulo"
#define CSPUTENTE "CSpUtente"
#define CSPUTENTEID "CSpUtenteID"
#define CCFPRODSW "CCFProdSw"
#define ZNRECB "ZNRecB"
#define ZNRECC "ZNRecC"
///////////////////////////////////////////////////////////
// TTRacciatoIntra
///////////////////////////////////////////////////////////
class TTracciatoIntra : public TTracciatoInvio
{
int _ndec;
protected:
public:
TTracciatoIntra(char tipo, const TIntra_context& ic);
virtual ~TTracciatoIntra() {}
};
TTracciatoIntra::TTracciatoIntra(char tipo, const TIntra_context& ic) : TTracciatoInvio(tipo)
{
switch (tipo)
{
case 'A':
add_filler(14);
add_fixedval(ic._tipo == _Intra12 ? "AT1210" : "AT1310", AN, 5);
add_field(ATIPOFOR, NU, 2); // Vale 01 10
add_field(ACFFOR, CF);
add_filler(483);
add_filler(4);
add_filler(4);
add_filler(100);
add_filler(1068);
add_filler(200);
break;
case 'B':
add_field(BCFDICH, CF);
add_field(BPROGMODULO, NU, 8); // Vale 1
add_field(BSPUTENTE, AN, 3);
add_filler(25);
add_field(BSPUTENTEID, AN, 20);
add_field(BCFPRODSW, CF); // Dato obbligatorio
add_field(BFLAGCONF, CB); // Vale 0 oppure 1 (dichiarazione confermata)
if (ic._tInvioIntra == _Intra12)
add_filler(3);
else
add_field(BUFFCOMP, AN, 3);
add_field(BANNORIF, DA, 4); // Dato obbligatorio
if (ic._tInvioIntra == _Intra12)
add_field(BMESERIF, NP, 2); // Dato obbligatorio
else
add_filler(2);
add_field(BCORRTERM, CB);
if (ic._tInvioIntra == _Intra12)
{
add_field(BPI, PI); // Dato obbligatorio
add_field(BCODATT, AN, 6); // Dato obbligatorio
add_field(BEVECC, CB);
add_field(BCOGNOME, AN, 24); // Obbligatorio se presente il campo Nome e assente Denominazione.
add_field(BNOME, AN, 20); // Dato obbligatorio se presente il campo 16
add_field(BCOMNASC, AN, 40); // Dato obbligatorio se presente il campo 16
add_field(BPROVNASC, PN); // Dato obbligatorio se presente il campo 16
add_field(BDATANASC, DT); // Dato obbligatorio se presente il campo 16
add_field(BSESSO, AN, 1); // Dato obbligatorio se presente il campo 16 Vale 'M' o 'F'.
}
else
{
add_filler(11);
add_filler(6);
add_filler(1);
add_filler(24);
add_filler(20);
add_filler(40);
add_filler(2);
add_filler(8);
add_filler(1);
}
add_field(BDENOM, AN, 60); // Alternativo ai campi 16 e 17. Obbligatorio se assenti i campi 16 e 17.
add_field(BNATGIU, NU, 2); // Dato obbligatorio se presente il campo 22. Vale da 1 a 45 e da 50 a 59
if (ic._tInvioIntra == _Intra12)
{
add_filler(40);
add_filler(2);
add_filler(35);
add_filler(5);
add_filler(4);
}
else
{
add_field(BCOMRF, AN, 40);
add_field(BPRRF, AN, 2);
add_field(BINDRF, AN, 35);
add_field(BCAPRF, AN, 5);
add_field(BCODCOMRF, AN, 4);
}
add_field(BCFRAPP, CF); // Il dato è obbligatorio per i contribuenti diversi dalle persone fisiche. Codice fiscale deve essere formalmente corretto e registrato in Anagrafe tributaria
add_field(BCODCAR, NU, 2); // Il campo è obbligatorio se è compilato il campo 29; vale da 1 a 9 e da 11 a 15
add_field(BPIDICH, PI);
add_field(BCOGNOMERAPP, AN, 24); // Il campo è obbligatorio se è compilato il campo 29
add_field(BNOMERAPP, AN, 20); // Il campo è obbligatorio se è compilato il campo 29
add_field(BSESSORAPP, AN, 1); // Il campo è obbligatorio se è compilato il campo 29
add_field(BDATANASCRAPP, DT); // Il campo è obbligatorio se è compilato il campo 29
add_field(BCOMNASCRAPP, AN, 40); // Il campo è obbligatorio se è compilato il campo 29
add_field(BPROVNASCRAPP, PN); // Il campo è obbligatorio se è compilato il campo 29
if (ic._tInvioIntra == _Intra12)
{
add_filler(3);
add_filler(24);
add_filler(24);
add_filler(35);
}
else
{
add_field(BCODSTAEST, AN, 3);
add_field(BSTAFED, AN, 24);
add_field(BLOCEST, AN, 24);
add_field(BINDEST, AN, 35);
}
add_field(BTELRAPP, AN, 12); // Il dato deve essere numerico
add_field(BFIRMADICH, CB); // Campo obbligatorio. Il controllo è confermabile.
add_field(BCFINT, CF); // Dato obbligatorio se presente un altro dato nella sezione. Dato obbligatorio se il campo 4 del record A è uguale a 10. Dato obbligatorio se il campo 5 del record A è diverso sia dal campo 2 del record B sia dal campo 29 del record B ed il campo 30 assume valori diversi da 2, 3, 4, 5, 7 e 11
if (ic._tInvioIntra == _Intra12)
add_filler(5);
else
add_field(BISCRCAF, AN, 35);
add_field(BSOGGDICH, NU, 1); // Vale 1 o 2, obbligatorio se presente campo 44
if (ic._tipo == _Intra12 )
add_filler(1);
add_field(BDATAIMP, DT); // Dato obbligatorio se presente un altro dato della sezione.
add_field(BFIRMAINT, CB); // Dato obbligatorio se presente un altro dato della sezione.
add_filler(ic._tipo == _Intra12 ? 1227 : 1128);
add_filler(20);
add_filler(34);
break;
case 'C':
add_field(CPROGMODULO, NU, 8); // Vale 1
add_field(CCFCONTR, CF);
add_field(CSPUTENTE, AN, 3);
add_filler(25);
add_field(CSPUTENTEID, AN, 20);
add_field(CCFPRODSW, CF); // Dato obbligatorio
break;
case 'Z':
add_filler(14);
add_field(ZNRECB, NU, 9);
add_field(ZNRECC, NU, 9);
add_filler(1864);
break;
default:
break;
}
}
///////////////////////////////////////////////////////////
// TRecordIntra
///////////////////////////////////////////////////////////
class TRecordIntra : public TRecordInvio
{
TIntra_context *_ic;
ofstream * _out;
TTracciatoIntra * _tracciatointra;
protected: // TObject
virtual TObject* dup() const { return new TRecordIntra(*this); }
public:
virtual const TTracciatoInvio & tracciato() const override { return *_tracciatointra; }
const TIntra_context & ic() { CHECK(_ic != nullptr, "Intra context undefined"); return *_ic; }
void set_ic(TIntra_context * ic) { _ic = ic; }
virtual bool change_record();
bool fill();
TRecordIntra(char tipo, ofstream * out, TIntra_context * ic = nullptr) : TRecordInvio(tipo), _out(out), _ic(ic) { CHECK(ic != nullptr, "Intra context undefined"); _tracciatointra = new TTracciatoIntra(tipo, *_ic); }
TRecordIntra(const TRecordIntra& rec) : TRecordInvio(rec.tipo_record()), _out(rec._out), _ic(rec._ic) { _tracciatointra = new TTracciatoIntra(rec.tipo_record(), *_ic); }
virtual ~TRecordIntra() {}
};
bool TRecordIntra::fill()
{
zero();
const char tipo = tipo_record();
const TRectype & ditta = cache().get(LF_NDITTE, main_app().get_firm());
const int codanagr = ditta.get_int(NDT_CODANAGR);
TToken_string key(ditta.get(NDT_TIPOA));
key.add(codanagr);
const TRectype & anagrafica = cache().get(LF_ANAG, key);
TString16 cfdich = anagrafica.get(ANA_COFI);
if (cfdich.blank())
cfdich = anagrafica.get(ANA_PAIV);
key = "F";
key.add(ditta.get(NDT_FIRMAT));
const TRectype & intermediario = cache().get(LF_ANAG, key);
zero();
switch (tipo)
{
case 'A':
{
if (ditta.get(NDT_DICHP).blank())
{
set(ATIPOFOR, 01);
set(ACFFOR, cfdich);
}
else
{
set(ATIPOFOR, 10);
set(ACFFOR, intermediario.get(ANA_COFI));
}
}
break;
case 'B':
{
set(BCFDICH, cfdich);
set(BPROGMODULO, _ic->_nb);
set(BSPUTENTE, "");
set(BSPUTENTEID, "");
set(BCFPRODSW, SIRIOCFPI);
set(BFLAGCONF, 1); // ??
if (_ic->_tInvioIntra == _Intra13)
set(BUFFCOMP, anagrafica.get(ANA_UFFIVA));
set(BANNORIF, _ic->_anno);
if (_ic->_tInvioIntra == _Intra12)
set(BMESERIF, _ic->_periodo);
set(BPI, anagrafica.get(ANA_PAIV));
set(BEVECC, anagrafica.get(ANA_EVECC).full());
if (anagrafica.get(ANA_TIPOA) == "F")
{
const TRectype & fisica = cache().get(LF_ANAGFIS, codanagr);
set(BCOGNOME, anagrafica.get(ANA_RAGSOC).left(24));
set(BNOME, anagrafica.get(ANA_RAGSOC).mid(30));
const TRectype & comune = cache().get(LF_COMUNI, fisica.get(ANF_COMNASC));
set(BCOMNASC, comune.get(COM_DENCOM));
set(BPROVNASC, comune.get(COM_PROVCOM));
set(BDATANASC, fisica.get_date(ANF_DATANASC));
set(BSESSO, fisica.get(ANF_SESSO));
}
const TRectype & giuridica = cache().get(LF_ANAGGIU, codanagr);
set(BDENOM, anagrafica.get(ANA_RAGSOC));
set(BNATGIU, giuridica.get_int(ANG_NATGIU));
const int codrapp = ditta.get_int(NDT_RAPPR);
key = "F";
key.add(codrapp);
if (_ic->_tInvioIntra == _Intra13)
{
const TRectype & comrf = cache().get(LF_COMUNI, anagrafica.get(ANA_COMRF));
set(BCOMRF, comrf.get(COM_DENCOM));
set(BPRRF, comrf.get(COM_PROVCOM));
set(BINDRF, anagrafica.get(ANA_INDRF));
set(BCAPRF, anagrafica.get(ANA_CAPRF));
set(BCODCOMRF, anagrafica.get(ANA_COMRF));
}
const TRectype & rappresentante = cache().get(LF_ANAG, key);
const TRectype & rappfis = cache().get(LF_ANAGFIS, codrapp);
set(BCFRAPP, rappresentante.get(ANA_PAIV));
set(BCODCAR, ditta.get_int(NDT_CARRAPP));
set(BPIDICH, anagrafica.get(ANA_PAIV));
set(BCOGNOMERAPP, rappresentante.get(ANA_RAGSOC).left(24));
set(BNOMERAPP, rappresentante.get(ANA_RAGSOC).mid(30));
set(BSESSORAPP, rappfis.get(ANF_SESSO));
set(BDATANASCRAPP, rappfis.get_date(ANF_DATANASC));
const TRectype & comune = cache().get(LF_COMUNI, rappfis.get(ANF_COMNASC));
set(BCOMNASCRAPP, comune.get(COM_DENCOM));
set(BPROVNASCRAPP, comune.get(COM_PROVCOM));
if (_ic->_tInvioIntra == _Intra13 && rappresentante.get(ANA_STATORES).full())
{
const TRectype & comres = cache().get(LF_COMUNI, rappfis.get(ANF_COMNASC));
const TRectype & statores = cache().get("%STA", rappresentante.get(ANA_STATORES));
set(BCODSTAEST, rappresentante.get(ANA_STATORES));
set(BSTAFED, statores.get("S0"));
set(BLOCEST, comres.get(COM_DENCOM));
set(BINDEST, rappresentante.get(ANA_CAPRES));
}
TString telrapp = anagrafica.get(ANA_PTELRF);
telrapp << anagrafica.get(ANA_TELRF);
set(BTELRAPP, telrapp);
set(BFIRMADICH, 1);
set(BCFINT, intermediario.get(ANA_COFI));
if (_ic->_tInvioIntra == _Intra13)
set(BISCRCAF, ditta.get(NDT_INTCAF));
set(BSOGGDICH, ditta.get(NDT_FIRMAT).blank() ? 1 : 2);
set(BDATAIMP, ""); //?
set(BFIRMAINT, 1);
}
break;
case 'C':
{
set(CPROGMODULO, _ic->_nc);
set(CCFCONTR,cfdich);
set(CSPUTENTE, "");
set(CSPUTENTEID, "");
set(CCFPRODSW, SIRIOCFPI);
break;
}
case 'Z':
set(ZNRECB, 1);
set(ZNRECC, _ic->_righeintra);
break;
default:
break;
}
return true;
}
bool TRecordIntra::change_record()
{
TString cfcontr;
get(CCFCONTR, cfcontr);
if (fill())
{
set(CCFCONTR, cfcontr);
if (_out != nullptr)
{
*_out << *this;
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////
// TRiepilogoIVA_recordset
///////////////////////////////////////////////////////////
class TRiepilogoIVAIntra_recordset : public TRiepilogoIVA_recordset
{
public:
virtual int is_intra() const { return true; }
virtual const char * remap_IVA(const char * codIVA, const TISAM_recordset & rmov) const;
TRiepilogoIVAIntra_recordset() : TRiepilogoIVA_recordset() {}
};
const char * TRiepilogoIVAIntra_recordset::remap_IVA(const char * codIVA, const TISAM_recordset & rmov) const
{
TString & mapped_code = get_tmp_string(16);
TCodiceIVA iva(codIVA);
TString statopaiv(rmov.get(FIELD_NAME(LF_CLIFO, CLI_STATOPAIV)).as_string());
TString4 tipo_forn("I");
const TString4 tipo_intra = iva.tipo_intra();
if (statopaiv.full())
{
const TRectype & stato = cache().get("%SCE", statopaiv);
if (stato.get_bool("B0"))
tipo_forn = "E";
else
tipo_forn = "X";
}
if (tipo_forn == "I" && tipo_intra == "7")
return mapped_code;
if (tipo_forn.full() && tipo_intra.full())
mapped_code << tipo_intra << tipo_forn;
return mapped_code;
}
///////////////////////////////////////////////////////////
// TInvioIntra12_13_mask
///////////////////////////////////////////////////////////
class TInvioIntra12_13_mask : public TIntra_mask
{
Intratype _tipo;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual int anno() const { return get_int(F_ANNO); }
short period_field() const { return F_PERIODO; }
virtual char frequenza(int anno = 0, char tipo = '\0') const { return 'M'; }
public:
void genera();
TInvioIntra12_13_mask();
};
bool TInvioIntra12_13_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ANNO :
case F_PERIODO :
if (((o.dlg() == F_ANNO) && (e == fe_init)) || e == fe_modify)
{
TString8 key; key.format("A%04d%01", o.mask().get_int(F_ANNO));
const TString & ninvio = cache().get("IRD", key, "I4");
o.mask().set(F_NUMERO, ninvio + 1);
o.mask().set(F_LAST, ninvio);
}
break;
case DLG_PRINT:
{
if (e == fe_button)
{
TRiepilogoIVA_report rep;
TRiepilogoIVAIntra_recordset * recset = new TRiepilogoIVAIntra_recordset();
int anno = get_int(F_ANNO);
int damese = get_int(F_PERIODO);
int amese = get_int(F_PERIODO);
if (_tipo == _Intra13)
{
damese = 1;
amese = 12;
}
rep.load("in0300a");
recset->set_anno(anno);
recset->set_da_mese(damese);
recset->set_a_mese(amese);
rep.set_recordset(recset);
rep.print_or_preview();
return false;
}
}
break;
default:
break;
}
return TIntra_mask::on_field_event(o, e, jolly);
}
// mode 0 = ask; 1 = append; 2 = remove
void TInvioIntra12_13_mask::genera()
{
TIntra_context ic;
ic._anno = anno();
ic._freq = 'M';
ic._periodo = periodo();
ic._nb = 1;
ic._nc = 1;
ic._tInvioIntra = _tipo = (Intratype)get_int(F_TIPO);
TFilename name = get(F_PATH);
TString filename = ic._tInvioIntra == _Intra12 ? "intra12" : "intra13";
filename << ic._anno << periodo_str();
name.add(filename);
if (name.exist() && yesno_box(FR("Il file %s esiste già: si desiderla eliminarlo?\n"),
(const char*)name))
xvt_fsys_remove_file(name);
else
return;
ofstream out(name, ios::out | ios::trunc);
if (!out)
{
cantwrite_box(name);
return;
}
TRecordIntra rec_a('A', &out, &ic);
TRecordIntra rec_b('B', &out, &ic);
TRecordIntra rec_c('C', &out, &ic);
TRecordIntra rec_z('Z', &out, &ic);
TRiepilogoIVA_recordset riep;
real totale_imponibile;
const int anno = get_int(F_ANNO);
int damese = get_int(F_PERIODO);
int amese = get_int(F_PERIODO);
if (_tipo == _Intra13)
{
damese = 1;
amese = 12;
}
riep.set_anno(anno);
riep.set_da_mese(damese);
riep.set_da_mese(amese);
ic._righeintra = riep.items();
TProgress_monitor pi(ic._righeintra, TR("Generazione Intra 12/13"), false);
rec_a.fill();
out << rec_a;
rec_b.fill();
out << rec_b;
rec_c.fill();
for (bool ok = riep.move_first(); pi.add_status() && ok; riep.move_next())
{
if (rec_c.ic()._tInvioIntra == _Intra12)
{
real totale_imposta;
const TString cod = riep.get(COD).as_string();
real imponibile = riep.get(IMPACQ).as_real();
real imposta = riep.get(IVAACQ).as_real();
if(cod.mid(2) != "7")
totale_imposta += imposta;
if (cod == "IB")
{
rec_c.np_put("TR012001", imponibile);
rec_c.np_put("TR012002", imposta);
}
else
{
if (cod == "EB")
{
rec_c.np_put("TR012003", imponibile);
rec_c.np_put("TR012004", imposta);
}
else
{
if (cod == "ES")
{
rec_c.np_put("TR012005", imponibile);
rec_c.np_put("TR012007", imposta);
}
else
if (cod == "E7")
rec_c.np_put("TR012006", imponibile);
else
{
if (cod == "XB")
{
rec_c.np_put("TR012008", imponibile);
rec_c.np_put("TR012009", imposta);
}
else
{
if (cod == "XS")
{
rec_c.np_put("TR012010", imponibile);
rec_c.np_put("TR012012", imposta);
}
else
if (cod == "X7")
rec_c.np_put("TR012011", imponibile);
}
}
}
}
rec_c.np_put("TR012013", totale_imposta);
}
else
{
real imponibile = riep.get(IMPACQ).as_real();
totale_imponibile += imponibile;
}
}
if (rec_c.ic()._tInvioIntra == _Intra13)
rec_c.np_put("TR013002", totale_imponibile);
out << rec_c;
rec_z.fill();
out << rec_z;
TString8 codtab; codtab.format("A%04d%01", get_int(F_ANNO));
TRectype & rird = (TRectype &)cache().get("IRD", codtab);
ic._progr = get_long(F_NUMERO);
rird.put("I4", ic._progr);
rird.rewrite_write();
TString msg("Generato il file ");
msg << name;
message_box(name);
}
TInvioIntra12_13_mask::TInvioIntra12_13_mask() : TIntra_mask("in0300a")
{
}
///////////////////////////////////////////////////////////
// TInvioIntra12_13_app
///////////////////////////////////////////////////////////
class TInvioIntra12_13_app : public TSkeleton_application
{
protected:
virtual void main_loop();
};
void TInvioIntra12_13_app::main_loop()
{
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_INTRA, LF_RINTRA, LF_RIEPRETT, 0);
TInvioIntra12_13_mask m;
m.load();
while (m.run() == K_ENTER)
m.genera();
m.save();
}
int in0300(int argc, char* argv[])
{
TInvioIntra12_13_app a;
a.run(argc, argv, TR("Generazione Intra 12/13"));
return 0;
}

7
src/in/in0300a.h Normal file
View File

@ -0,0 +1,7 @@
#define F_TIPO 101
#define F_ANNO 102
#define F_PERIODO 103
#define F_NUMERO 104
#define F_LAST 105
#define F_PATH 106

128
src/in/in0300a.rep Normal file
View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report libraries="" page_merge="" save_printer="" name="in0300a" use_printer_font="" orientation="2" page_split="" lpi="6" command="cg0 -7" class="cg0800">
<description>Riepilogo progressivi IVA</description>
<font face="Arial" size="7" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="" hidden="" page_break="" can_break="" pattern="1">
<field x="4" deactivated="" type="Data" hidden="" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="1" hide_zero="" text="">
<source>#SYSTEM.DATE</source>
</field>
<field x="15.5" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="Ditta">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="21.5" deactivated="" type="Stringa" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="50" codval="" id="" pattern="1" hide_zero="" text="">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="72.5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="Pag.">
<source>#PAGE</source>
</field>
<field x="77" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="1" hide_zero="" text="">
<source>#PAGE</source>
</field>
<field x="3.5" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="25" codval="" id="" pattern="1" hide_zero="" text="IVA Intracomunitaria">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="29.5" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#ANNO</source>
</field>
<field x="39.5" y="1" deactivated="" type="Array" hidden="" link="" dynamic_height="" shade_offset="" width="16" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#DAMESE</source>
<list>
<li Value="da gennaio" Code="1" />
<li Value="da febbraio" Code="2" />
<li Value="da marzo" Code="3" />
<li Value="da aprile" Code="4" />
<li Value="da maggio" Code="5" />
<li Value="da giugno" Code="6" />
<li Value="da luglio" Code="7" />
<li Value="da agosto" Code="8" />
<li Value="da settembre" Code="9" />
<li Value="da ottobre" Code="10" />
<li Value="da novembre" Code="11" />
<li Value="da dicembre" Code="12" />
<li Value="annuale" Code="13" />
</list>
</field>
<field x="65.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="1" hide_zero="" text="Acquisti">
<font face="Arial" size="10" />
</field>
<field x="55.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field border="2" x="4" y="4.75" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="78" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="1" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1">
<field x="55" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPACQ</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.102 +!</postscript>
</field>
<field x="68.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAACQ</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.103 +!</postscript>
</field>
<field deactivated="" type="Stringa" hidden="1" link="" dynamic_height="" shade_offset="" width="4" codval="" id="101" pattern="1" hide_zero="" text="">
<source>COD</source>
</field>
<field x="4" deactivated="" type="Stringa" hidden="" link="" dynamic_height="1" shade_offset="" width="50" codval="" height="2" id="102" pattern="1" hide_zero="" text="">
<prescript description="B1.102 PRESCRIPT">MON
#101 @
0
1
STRMID
"B"
=
IF
"Beni"
ELSE
#101 @
0
1
STRMID
"S"
=
IF
"Servizi"
ELSE
"Art.7 - ter"
THEN
THEN
#101 @
1
1
STRMID
"E"
=
IF
" intracomunitari"
ELSE
#101 @
1
1
STRMID
"X"
=
IF
" extracomunitari"
ELSE
""
THEN
THEN
+
#THIS ! </prescript>
</field>
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="1" hidden="" page_break="" can_break="" pattern="1">
<field border="2" x="4" y="0.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="78" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
<field x="10" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="20" codval="" id="101" pattern="1" hide_zero="" text="Totale">
<source>DESC</source>
</field>
<field x="55.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="102" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="69" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="103" pattern="1" hide_zero="1" text="###.###.###,@@" />
</section>
</report>

73
src/in/in0300a.uml Normal file
View File

@ -0,0 +1,73 @@
#include "in0300a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 "Conferma"
PICTURE TOOL_SAVEREC
END
BUTTON DLG_PRINT 2 2
BEGIN
PROMPT 2 1 "Stampa"
PICTURE BMP_PRINT
END
BUTTON DLG_SETPRINT 2 2
BEGIN
PROMPT 3 1 "Imposta"
PICTURE BMP_SETPRINT
END
#include <helpbar.h>
ENDPAGE
PAGE "Generazione Intra 12/13" 0 2 0 0
LIST F_TIPO 1 8
BEGIN
PROMPT 1 1 "Tipo "
ITEM "0|Intra 12" MESSAGE ENABLE,1@
ITEM "1|Intra 13" MESSAGE CLEAR,F_PERIODO|"1",2@
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno "
FLAGS "AU"
END
LIST F_PERIODO 2 17
BEGIN
PROMPT 1 5 "Periodo "
FLAGS "AM"
FIELD PERIODO
GROUP 1
END
NUMBER F_NUMERO 6
BEGIN
PROMPT 1 7 "Invio "
CHECKTYPE REQUIRED
GROUP 1 2
END
NUMBER F_LAST 6
BEGIN
PROMPT 1 9 "Ultimo "
FLAGS "D"
GROUP 2
END
STRING F_PATH 50 29
BEGIN
PROMPT 1 11 "Cartella "
DSELECT
CHECKTYPE REQUIRED
END
ENDPAGE
ENDMASK

View File

@ -10,6 +10,9 @@
#include "../cg/cglib.h"
#include <mov.h>
#include <intra.h>
#include <rintra.h>
#include <riepintra.h>
///////////////////////////////////////////////////////////
// TImmissione_mask
@ -115,6 +118,8 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
}
}
enable_valuta();
if (e == fe_init && o.get().full() && get_real(F_TOT_DOC) == ZERO)
set(F_TOT_DOC, cache().get(LF_MOV, o.get(), MOV_TOTDOC));
}
break;
case F_TIPO_MOV:
@ -253,13 +258,16 @@ bool TImmissione_mask::on_sheet_event(TSheet_field& s, TField_event e, int row)
if (e == se_notify_add)
{
const bool enable_val = is_true_value(get(F_VALUTA));
if (!enable_val)
{
const int col = s.cid2index(F_AMM_VALUTA);
row = s.items()-1;
s.enable_cell(row, col, enable_val);
s.force_update(row);
}
s.set_row_cell(F_TIPO_INTRA, "B", row);
}
else
if (e == se_notify_modify)

View File

@ -25,23 +25,31 @@
#define F_RIGHE 350
#define F_AMM_LIRE 101
#define F_AMM_VALUTA 102
#define F_NATURA_TRANS 103
#define F_NOMENCLATURA 104
#define F_MASSA_KG 105
#define F_MASSA_UMS 106
#define F_UMS 107
#define F_VALORE_STAT 108
#define F_CONSEGNA 109
#define F_TRASPORTO 110
#define F_PAESE 111
#define F_PAESE_ORIG 112
#define F_TIPO_INTRA 101
#define F_AMM_LIRE 102
#define F_AMM_VALUTA 103
#define F_NATURA_TRANS 104
#define F_NOMENCLATURA 105
#define F_MASSA_KG 106
#define F_MASSA_UMS 107
#define F_UMS 108
#define F_VALORE_STAT 109
#define F_CONSEGNA 110
#define F_TRASPORTO 111
#define F_PAESE 112
#define F_PAESE_ORIG 113
#define F_PROV 114
#define F_CODSERV 115
#define F_MODEROG 116
#define F_MODINCPAG 117
#define F_STATOINCPAG 118
#define F_PAESE_DUMMY 212
#define F_PROV 113
#define GR_CESSIONI 1
#define GR_ACQUISTI 2
#define GR_BENI 3
#define GR_SERVIZI 4
#define R_RIEPILOGHI 100
#define R_TIPO 101

View File

@ -182,6 +182,7 @@ END
SPREADSHEET F_RIGHE 78 -3
BEGIN
PROMPT 0 10 ""
ITEM "Tipo@7"
ITEM "Ammontare\nOperaz.@18"
ITEM "Ammontare\nValuta@18"
ITEM "Natura\nTransaz.@7"
@ -194,7 +195,11 @@ BEGIN
ITEM "Modo\nTrasp.@5"
ITEM "Paese\nDest.@6"
ITEM "Paese\nOrig.@6"
ITEM "Provincia\nOrig."
ITEM "Provincia\nOrig."
ITEM "Codice\nServizio"
ITEM "Modalità\nErog."
ITEM "Modalità\nInc./Pag."
ITEM "Stato\nInc./Pag."
FLAGS "A"
USE LF_RINTRA KEY NUMRIG
INPUT NUMREG F_NUM_REG
@ -209,18 +214,26 @@ ENDPAGE
ENDMASK
PAGE "Righe" -1 -1 78 9
PAGE "Righe" -1 -1 78 15
LIST F_TIPO_INTRA 1 7
BEGIN
PROMPT 1 1 "Tipo "
FIELD TIPOINTRA
ITEM "B|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@
ITEM "S|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@
END
CURRENCY F_AMM_LIRE 18
BEGIN
PROMPT 1 1 "Ammontare operaz. "
PROMPT 1 2 "Ammontare operaz. "
FIELD AMMLIRE
CHECKTYPE REQUIRED
END
CURRENCY F_AMM_VALUTA 18
BEGIN
PROMPT 40 1 "in valuta "
PROMPT 40 2 "in valuta "
DRIVENBY -F_VALUTA
FIELD AMMVALUTA
CHECKTYPE REQUIRED
@ -237,6 +250,7 @@ BEGIN
OUTPUT F_NATURA_TRANS CODTAB
CHECKTYPE NORMAL
FIELD NATURA
GROUP GR_BENI
END
NUMBER F_NOMENCLATURA 8
@ -252,6 +266,7 @@ BEGIN
FIELD NOMENCL
VALIDATE FIXLEN_FUNC 8
CHECKTYPE REQUIRED
GROUP GR_BENI
FLAGS "Z"
END
@ -259,12 +274,14 @@ NUMBER F_MASSA_KG 13 5
BEGIN
PROMPT 1 4 "Massa Kg."
FIELD MASSAKG
GROUP GR_BENI
END
NUMBER F_MASSA_UMS 13 5
BEGIN
PROMPT 36 4 "Massa "
FIELD MASSAUMS
GROUP GR_BENI
END
STRING F_UMS 2
@ -278,12 +295,14 @@ BEGIN
OUTPUT F_UMS CODTAB
CHECKTYPE NORMAL
FIELD UMS
GROUP GR_BENI
END
CURRENCY F_VALORE_STAT 15
BEGIN
PROMPT 1 5 "Valore statistico "
PROMPT 1 5 "Valore statistico "
FIELD VALSTAT
GROUP GR_BENI
END
STRING F_CONSEGNA 3
@ -297,11 +316,12 @@ BEGIN
OUTPUT F_CONSEGNA CODTAB
CHECKTYPE NORMAL
FIELD CONSEGNA
GROUP GR_BENI
END
NUMBER F_TRASPORTO 1
BEGIN
PROMPT 1 6 "Modo di trasporto "
PROMPT 1 6 "Modo di trasporto "
USE %IMT
INPUT CODTAB F_TRASPORTO
DISPLAY "Codice" CODTAB
@ -309,24 +329,21 @@ BEGIN
OUTPUT F_TRASPORTO CODTAB
CHECKTYPE NORMAL
FIELD TRASPORTO
GROUP GR_BENI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Paese provenienza"
GROUP GR_ACQUISTI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Paese provenienza "
GROUP GR_ACQUISTI
GROUP GR_ACQUISTI
FLAGS "G"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Paese destinazione "
GROUP GR_CESSIONI
GROUP GR_CESSIONI
FLAGS "G"
END
STRING F_PAESE 2
@ -340,6 +357,7 @@ BEGIN
OUTPUT F_PAESE CODTAB
CHECKTYPE NORMAL
FIELD PAESE
GROUP GR_BENI
WARNING "Inserire il codice di un paese CEE valido"
END
@ -354,7 +372,8 @@ BEGIN
OUTPUT F_PAESE_ORIG CODTAB
CHECKTYPE NORMAL
FIELD PAESEORIG
GROUP GR_ACQUISTI
GROUP GR_ACQUISTI GR_BENI
FLAGS "G"
WARNING "Inserire il codice di un paese CEE valido"
ENEND
@ -362,28 +381,101 @@ STRING F_PAESE_DUMMY 2
BEGIN
PROMPT 81 8 "Paese anti NFCHECK "
FLAGS "D"
GROUP GR_CESSIONI
GROUP GR_CESSIONI GR_BENI
FLAGS "G"
END
TEXT DLG_NULL
BEGIN
PROMPT 43 7 "Provincia d'origine"
GROUP GR_CESSIONI
PROMPT 43 7 "Provincia d'origine "
GROUP GR_CESSIONI GR_BENI
FLAGS "G"
END
TEXT DLG_NULL
BEGIN
PROMPT 43 7 "Prov. destinazione"
GROUP GR_ACQUISTI
PROMPT 43 7 "Prov. destinazione "
GROUP GR_ACQUISTI GR_BENI
FLAGS "G"
END
STRING F_PROV 2
BEGIN
PROMPT 64 7 ""
PROMPT 65 7 ""
FLAGS "U"
CHECKTYPE NORMAL
WARNING "Provincia assente"
FIELD PROV
GROUP GR_BENI
END
STRING F_CODSERV 5
BEGIN
PROMPT 1 9 "Codice servizio "
USE %CPA
INPUT CODTAB F_CODSERV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODSERV CODTAB
FIELD CODSERV
GROUP GR_SERVIZI
END
LIST F_MODEROG 1 15
BEGIN
PROMPT 1 10 "Modalità Erogazione"
ITEM "I|Unica soluzione"
ITEM "R|Più soluzioni"
FIELD MODEROG
GROUP GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 11 "Modalità di incasso "
GROUP GR_CESSIONI GR_SERVIZI
FLAGS "G"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 11 "Modalità di pagamento"
GROUP GR_ACQUISTI GR_BENI
FLAGS "G"
END
LIST F_MODINCPAG 1 9
BEGIN
PROMPT 20 11 ""
ITEM "B|Bonifico"
ITEM "A|Accredito"
ITEM "X|Altro"
FIELD MODINCPAG
GROUP GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 12 "Stato di incasso "
GROUP GR_CESSIONI GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 12 "Stato di pagamento "
GROUP GR_ACQUISTI GR_BENI
END
STRING F_STATOINCPAG 2
BEGIN
PROMPT 20 12 ""
USE %SCE
INPUT CODTAB F_STATOINCPAG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOINCPAG CODTAB
FIELD ISOINCPAG
GROUP GR_SERVIZI
END
ENDPAGE

View File

@ -5,6 +5,10 @@
#include "in0600a.h"
#include "inlib01.h"
#include <intra.h>
#include <rintra.h>
#include <rieprett.h>
class TRiepiloghi_mask : public TIntra_mask
{
protected:

View File

@ -101,9 +101,18 @@ BEGIN
WARNING "Anno non valido"
END
LIST F_TIPOINTRA 1 7
BEGIN
PROMPT 46 3 "Tipo Intra "
ITEM "B|Beni" MESSAGE ENABLE,-GR_BENI|DISABLE,GR_SERVIZI
ITEM "S|Servizi" MESSAGE DISABLE,-GR_BENI|ENABLE,GR_SERVIZI
KEY 1
FIELD TIPOINTRA
END
LIST F_TIPO 1 10
BEGIN
PROMPT 49 3 "Tipo riepilogo "
PROMPT 67 3 "Tipo riepilogo "
ITEM "C|Cessioni"
MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@
ITEM "A|Acquisti"
@ -116,6 +125,7 @@ NUBER F_NUM_RIG 7
BEGIN
PROMPT 1 4 "Riga di riepilogo "
USE LF_RIEPRETT
INPUT TIPOINTRA F_TIPO SELECT
INPUT TIPO F_TIPO SELECT
INPUT ANNO F_ANNO SELECT
INPUT PERIODO F_PERIODO_H SELECT

View File

@ -12,6 +12,22 @@
#include "../cg/cgsaldac.h"
#include <mov.h>
#include <intra.h>
#include <rintra.h>
#include <riepintra.h>
TIntra_context::TIntra_context()
{
_tipointra = 'B';
_tipo = 'C'; _freq = 'T'; _anno = 1999; _periodo = 1;
_progr = _righe_riep = _righe_rett = 0L;
// Intra 12/13
_tInvioIntra = _Intra12;
_nb = _nc = 1;
_righeintra = 0L;
}
///////////////////////////////////////////////////////////
// TIntra_frequency
@ -104,15 +120,6 @@ void TIntra_mask::on_firm_change()
_freq.update();
}
short TIntra_mask::type_field() const
{
NFCHECK("Non è stato specificato il campo del tipo");
return DLG_NULL;
}
short TIntra_mask::period_field() const
{ return DLG_NULL; }
char TIntra_mask::tipo() const
{
short id = type_field();
@ -200,15 +207,16 @@ public:
TDati_riepilogo& operator +=(const TDati_riepilogo& r);
void write(TRectype& rec) const;
const TString& stato(TString& c) const { _key.get(0, c); return c; }
const TString& partita_iva(TString& c) const { _key.get(1, c); return c; }
const TString& natura(TString& c) const { _key.get(3, c); return c; }
const TString& nomenclatura(TString& c) const { _key.get(4, c); return c; }
const TString& consegna(TString& c) const { _key.get(5, c); return c; }
const TString& trasporto(TString& c) const { _key.get(6, c); return c; }
const TString& paese(TString& c) const { _key.get(7, c); return c; }
const TString& paese_orig(TString& c) const { _key.get(8, c); return c; }
const TString& provincia(TString& c) const { _key.get(9, c); return c; }
const TString& tipo_intra(TString& c) const { _key.get(0, c); return c; }
const TString& stato(TString& c) const { _key.get(1, c); return c; }
const TString& partita_iva(TString& c) const { _key.get(2, c); return c; }
const TString& natura(TString& c) const { _key.get(4, c); return c; }
const TString& nomenclatura(TString& c) const { _key.get(5, c); return c; }
const TString& consegna(TString& c) const { _key.get(6, c); return c; }
const TString& trasporto(TString& c) const { _key.get(7, c); return c; }
const TString& paese(TString& c) const { _key.get(8, c); return c; }
const TString& paese_orig(TString& c) const { _key.get(9, c); return c; }
const TString& provincia(TString& c) const { _key.get(10, c); return c; }
TDati_riepilogo(const TDati_riepilogo& r);
TDati_riepilogo(const TToken_string& key, const TRectype& rec, const TString& codval);
@ -234,10 +242,14 @@ TDati_riepilogo& TDati_riepilogo::operator +=(const TDati_riepilogo& r)
void TDati_riepilogo::write(TRectype& rec) const
{
TString str;
const TString16 nomencl = nomenclatura(str);
const TString4 tipointra = cache().get("%NOC", nomencl, "S6");
rec.put("TIPOINTRA", tipointra);
rec.put("STATO", stato(str));
rec.put("PIVA", partita_iva(str));
rec.put("NATURA", natura(str));
rec.put("NOMENCL", nomenclatura(str));
rec.put("NOMENCL", nomencl);
rec.put("CONSEGNA", consegna(str));
rec.put("TRASPORTO", trasporto(str));
rec.put("PAESE", paese(str));
@ -301,24 +313,26 @@ public:
void TRiepiloghi::add(const TRectype& row, const TRectype& head, const TRectype& mov)
{
TString8 cod; cod << head.get_char("TIPOCF") << '|' << head.get("CODCF");
TString8 cod; cod << head.get_char(INTRA_TIPOCF) << '|' << head.get(INTRA_CODCF);
const TRectype& clifo = cache().get(LF_CLIFO, cod);
TString4 codval = head.get("CODVAL");
TString4 codval = head.get(MOV_CODVAL);
const TString4 tipointra = row.get(RINTRA_TIPOINTRA);
if (::is_euro_value(codval))
codval.cut(0);
TToken_string key;
key.add(clifo.get("STATOPAIV"));
key.add(clifo.get("PAIV"));
key.add(tipointra);
key.add(clifo.get(CLI_STATOPAIV));
key.add(clifo.get(CLI_PAIV));
key.add(codval); // Non e' chiaro se raggruppare per valuta!
key.add(row.get("NATURA"));
key.add(row.get("NOMENCL"));
key.add(row.get("CONSEGNA"));
key.add(row.get("TRASPORTO"));
key.add(row.get("PAESE"));
key.add(row.get("PAESEORIG")); // Campo solo per Acquisti
key.add(row.get("PROV"));
key.add(row.get(RINTRA_NATURA));
key.add(row.get(tipointra == "B" ? RINTRA_NOMENCL : RINTRA_CODSERV));
key.add(row.get(RINTRA_CONSEGNA));
key.add(row.get(RINTRA_TRASPORTO));
key.add(row.get(RINTRA_PAESE));
key.add(row.get(RINTRA_PAESEORIG)); // Campo solo per Acquisti
key.add(row.get(RINTRA_PROV));
TDati_riepilogo* data = (TDati_riepilogo*)_ass.objptr(key);
@ -404,15 +418,16 @@ int TRettifiche::load_manual_rett(char tipo, int anno, int periodo)
long TRettifiche::rett2riep(const TRectype& rett) const
{
TString query, filter;
filter << "TIPO=" << (rett.get_char("TIPO")=='B' ? 'A' : 'C')
<< " ANNO=" << rett.get("ANNORETT") << " PERIODO=" << rett.get("PERETT");
filter << " TIPO=" << (rett.get_char(RIEPINTRA_TIPO) == 'B' ? 'A' : 'C')
<< " ANNO=" << rett.get(RIEPINTRA_ANNORETT) << " PERIODO=" << rett.get(RIEPINTRA_PERETT);
query << "USE " << LF_RIEPRETT
<< "\nSELECT (NOMENCL='" << rett.get("NOMENCL") << "')&&(PIVA='" << rett.get("PIVA") << "')"
<< "\nSELECT ((NOMENCL='" << rett.get(RIEPINTRA_NOMENCL) << "')||(CODSERV=='" << rett.get(RIEPINTRA_CODSERV) << "'))&&(PIVA='" << rett.get(RIEPINTRA_PIVA) << "')"
<< "\nFROM " << filter << "\nTO " << filter;
long nriga = 1;
TISAM_recordset rr(query);
if (rr.move_first())
nriga = rr.get("NUMRIG").as_int();
nriga = rr.get(RINTRA_NUMRIG).as_int();
return nriga;
}
@ -423,47 +438,67 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur
TRectype rett(LF_RIEPRETT);
const char tipo = mov.get_char(MOV_TIPO)=='F' ? 'B' : 'D';
rett.put("TIPO", tipo);
rett.put("ANNO", datareg.year());
rett.put("PERIODO", _freq.date2periodo(datareg, tipo));
rett.put("NUMRIG", 0); // Auto
const TString4 tipointra = rintra.get(RINTRA_TIPOINTRA);
rett.put(RIEPINTRA_TIPOINTRA, tipointra);
rett.put(RIEPINTRA_TIPO, tipo);
rett.put(RIEPINTRA_ANNO, datareg.year());
rett.put(RIEPINTRA_PERIODO, _freq.date2periodo(datareg, tipo));
rett.put(RIEPINTRA_NUMRIG, 0); // Auto
TString8 cod; cod << mov.get_char(MOV_TIPO) << '|' << mov.get(MOV_CODCF);
const TRectype& clifo = cache().get(LF_CLIFO, cod);
TString4 codval = mov.get("CODVALI");
TString4 codval = mov.get(MOV_CODVALI);
if (::is_euro_value(codval))
codval.cut(0);
rett.put("STATO", clifo.get("STATOPAIV"));
rett.put("PIVA", clifo.get("PAIV"));
rett.put("NATURA", rintra.get("NATURA"));
rett.put("NOMENCL", rintra.get("NOMENCL"));
rett.put("CONSEGNA", rintra.get("CONSEGNA"));
rett.put("TRASPORTO", rintra.get("TRASPORTO"));
rett.put("PAESE", rintra.get("PAESE"));
rett.put(RIEPINTRA_STATO, clifo.get(CLI_STATOPAIV));
rett.put(RIEPINTRA_PIVA, clifo.get(CLI_PAIV));
rett.put(RIEPINTRA_NATURA, rintra.get(RINTRA_NATURA));
if (tipointra == "B")
rett.put(RIEPINTRA_NOMENCL, rintra.get(RINTRA_NOMENCL));
else
rett.put(RIEPINTRA_CODSERV, rintra.get(RINTRA_CODSERV));
rett.put(RIEPINTRA_CONSEGNA, rintra.get(RINTRA_CONSEGNA));
rett.put(RIEPINTRA_TRASPORTO, rintra.get(RINTRA_TRASPORTO));
rett.put(RIEPINTRA_PAESE, rintra.get(RINTRA_PAESE));
if (tipo == 'B') // Campi solo per Acquisti
{
rett.put("PAESEORIG", rintra.get("PAESEORIG"));
rett.put("PROV", rintra.get("PROV"));
rett.put(RIEPINTRA_PAESEORIG, rintra.get(RINTRA_PAESEORIG));
rett.put(RIEPINTRA_PROV, rintra.get(RINTRA_PROV));
}
const real euri = rintra.get_real("AMMLIRE");
rett.put("AMMLIRE", abs(euri));
real euri = rintra.get_real(RINTRA_AMMLIRE);
rett.put(RIEPINTRA_SEGNORETT, ((tipointra == "S") || (euri > ZERO)) ? '+' : '-');
if (tipointra == "B")
euri = abs(euri);
rett.put(RIEPINTRA_AMMLIRE, euri);
if (codval.full())
{
rett.put("CODVAL", codval);
rett.put("AMMVALUTA", abs(mov.get_real("CORRVALUTA")));
rett.put(RIEPINTRA_CODVAL, codval);
real impval = rintra.get_real(RINTRA_AMMVALUTA);
if (tipointra == "B")
impval = abs(impval);
rett.put(RIEPINTRA_AMMVALUTA, impval);
}
rett.put("SEGNORETT", euri>ZERO ? '+': '-');
rett.put("VALSTAT", abs(rintra.get_real("VALSTAT")));
rett.put("MASSAKG", rintra.get("MASSAKG"));
rett.put("MASSAUMS", rintra.get("MASSAUMS"));
rett.put("NUMREG", mov.get(MOV_NUMREG));
rett.put(RIEPINTRA_VALSTAT, abs(rintra.get_real(RINTRA_VALSTAT)));
rett.put(RIEPINTRA_MASSAKG, rintra.get(RINTRA_MASSAKG));
rett.put(RIEPINTRA_MASSAUMS, rintra.get(RINTRA_MASSAUMS));
rett.put(RIEPINTRA_NUMREG, mov.get(MOV_NUMREG));
rett.put(RIEPINTRA_MODEROG, rintra.get(RINTRA_MODEROG));
rett.put(RIEPINTRA_MODINCPAG, rintra.get(RINTRA_MODINCPAG));
rett.put(RIEPINTRA_MODEROG, rintra.get(RINTRA_MODEROG));
const TDate dt_fatt = cache().get(LF_MOV, nr_fattura, MOV_DATAREG);
rett.put("ANNORETT", dt_fatt.year());
rett.put("PERETT", _freq.date2periodo(dt_fatt, tipo));
rett.put("NUMRETT", rett2riep(rett));
rett.put(RIEPINTRA_ANNORETT, dt_fatt.year());
rett.put(RIEPINTRA_PERETT, _freq.date2periodo(dt_fatt, tipo));
rett.put(RIEPINTRA_NUMRETT, rett2riep(rett));
return _rett.add(rett);
}
@ -474,7 +509,7 @@ int TRettifiche::sort()
for (int i = 0; i < _rett.items(); i++)
{
TRectype* r = (TRectype*)_rett.objptr(i);
r->put("NUMRIG", i+1);
r->put(RIEPINTRA_NUMRIG, i+1);
}
return _rett.items();
}
@ -544,8 +579,8 @@ bool TGenerazione_mask::genera_riepiloghi()
const TDate filtro_a_data(31,12, anno_r+1);
TRectype filter_da(LF_INTRA), filter_a(LF_INTRA);
filter_da.put("DATAREG", filtro_da_data);
filter_a.put("DATAREG", filtro_a_data);
filter_da.put(INTRA_DATAREG, filtro_da_data);
filter_a.put(INTRA_DATAREG, filtro_a_data);
TRelation rel(LF_INTRA);
rel.add(LF_RINTRA, "NUMREG==NUMREG");
@ -608,20 +643,22 @@ bool TGenerazione_mask::genera_riepiloghi()
if (riepiloghi > 0)
{
TProgress_monitor pi(riepiloghi, TR("Scrittura riepiloghi intra..."), false);
riep.put("TIPO", tipo);
riep.put("ANNO", anno_r);
riep.put("PERIODO", peri);
riep.put("NUMRIG", 1);
riep.put(RIEPINTRA_TIPO, tipo);
riep.put(RIEPINTRA_ANNO, anno_r);
riep.put(RIEPINTRA_PERIODO, peri);
riep.put(RIEPINTRA_NUMRIG, 1);
int err = riep.read();
for (int r = 0; r < riepiloghi; r++)
for (int r = 0; pi.add_status() && r < riepiloghi; r++)
{
pi.add_status();
riep.put("TIPO", tipo);
riep.put("ANNO", anno_r);
riep.put("PERIODO", peri);
riep.put("NUMRIG", r+1);
riep.put(RIEPINTRA_TIPO, tipo);
riep.put(RIEPINTRA_ANNO, anno_r);
riep.put(RIEPINTRA_PERIODO, peri);
riep.put(RIEPINTRA_NUMRIG, r+1);
_riep[r].write(riep.curr());
riep.put("FREQUENZA", freq);
riep.put(RIEPINTRA_FREQUENZA, freq);
const int werr = err == NOERR ? riep.rewrite() : riep.write();
if (werr != NOERR)

View File

@ -5,6 +5,29 @@
#include <automask.h>
#endif
typedef enum { _Intra12, _Intra13 } Intratype;
struct TIntra_context
{
char _tipointra;
char _tipo;
long _progr;
char _freq;
int _anno;
int _periodo;
long _righe_riep;
real _totale_riep;
long _righe_rett;
real _totale_rett;
// Intra 12/13
Intratype _tInvioIntra;
int _nb;
int _nc;
long _righeintra;
TIntra_context();
};
class TIntra_frequency : public TObject
{
char _freq_ces, _freq_acq;
@ -27,14 +50,14 @@ protected:
virtual void on_firm_change();
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual short type_field() const;
virtual short period_field() const;
virtual short type_field() const { return DLG_NULL; }
virtual short period_field() const { return DLG_NULL; }
virtual int anno() const pure;
public:
char tipo() const;
int periodo() const;
char frequenza(int anno = 0, char tipo = '\0') const;
virtual char frequenza(int anno = 0, char tipo = '\0') const;
int date2periodo(const TDate& d) const;
const char* periodo_str() const;

View File

@ -1,79 +1,85 @@
<report name="bastird" lpi="6">
<?xml version="1.0" encoding="UTF-8" ?>
<report libraries="" page_merge="" save_printer="" name="instird" use_printer_font="" orientation="" page_split="" lpi="6" command="" class="">
<font face="Courier New" size="10" />
<section keep_with_next="1" type="Head">
<field type="Stringa" width="50">
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="" hidden="" page_break="" can_break="" pattern="1">
<field deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="50" codval="" id="" pattern="2" hide_zero="" text="">
<font italic="1" face="Courier New" bold="1" size="10" />
<source>#SYSTEM.RAGSOC</source>
</field>
<field y="1" type="Testo" valign="center" align="center" width="96" height="2" text="Tabella Dati Riassuntivi">
<field y="1" deactivated="" type="Testo" valign="center" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="96" codval="" height="2" id="" pattern="2" hide_zero="" text="Tabella Dati Riassuntivi">
<font face="Courier New" bold="1" size="14" />
</field>
<field border="2" x="1" y="3.5" type="Linea" width="93" height="0" />
<field x="2" y="4" type="Testo" width="4" text="Tipo">
<field border="2" x="1" y="3.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="93" codval="" height="0" id="" pattern="2" hide_zero="" text="" />
<field x="2" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="Tipo">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="7" y="4" type="Testo" width="4" text="Anno">
<field x="7" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="Anno">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="12" y="4" type="Testo" width="4" text="Mese">
<field x="12" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="Mese">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="20" y="4" type="Testo" width="5" text="Disco">
<field x="20" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="Disco">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="30" y="4" type="Testo" width="11" text="Righe riep.">
<field x="30" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe riep.">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="46" y="4" type="Testo" width="12" text="Amm. riepil.">
<field x="46" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. riepil.">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="61" y="4" type="Testo" width="11" text="Righe rett.">
<field x="61" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe rett.">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="78" y="4" type="Testo" width="12" text="Amm. rettif.">
<field x="78" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. rettif.">
<font face="Courier New" bold="1" size="10" />
</field>
<field border="2" x="1" y="5.5" type="Linea" width="93" height="0" />
<field x="20" y="5.5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Intra 12&#2F;13">
<font face="Courier New" bold="1" size="10" />
</field>
<field border="2" x="1" y="6.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="93" codval="" height="0" id="" pattern="2" hide_zero="" text="" />
</section>
<section keep_with_next="1" type="Head" level="1" />
<section keep_with_next="1" type="Body" />
<section keep_with_next="1" type="Body" level="1">
<field x="2" type="Stringa" link="IRD.CODTAB[1,1]" width="1">
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="1" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1">
<field x="2" deactivated="" type="Stringa" hidden="" link="IRD.CODTAB[1,1]" dynamic_height="" shade_offset="" width="1" codval="" id="" pattern="2" hide_zero="" text="">
<source>CODTAB[1,1]</source>
</field>
<field x="7" type="Stringa" link="IRD.CODTAB[2,5]" width="4">
<field x="7" deactivated="" type="Stringa" hidden="" link="IRD.CODTAB[2,5]" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="">
<source>CODTAB[2,5]</source>
</field>
<field x="11.87" type="Stringa" link="IRD.CODTAB[6,7]" width="2">
<field x="11.87" deactivated="" type="Stringa" hidden="" link="IRD.CODTAB[6,7]" dynamic_height="" shade_offset="" width="2" codval="" id="" pattern="2" hide_zero="" text="">
<source>CODTAB[6,7]</source>
</field>
<field x="20" type="Numero" align="right" width="4">
<field x="20" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="">
<source>I0</source>
</field>
<field x="35" type="Numero" align="right" width="5">
<field x="35" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="">
<source>I2</source>
</field>
<field x="43" type="Stringa" width="15" text="##@,@@">
<field x="43" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="15" codval="" id="" pattern="2" hide_zero="" text="##@,@@">
<source>R0</source>
</field>
<field x="67" type="Numero" align="right" width="5">
<field x="67" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="">
<source>I3</source>
</field>
<field x="75" type="Stringa" width="15" text="##@,@@">
<field x="75" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="15" codval="" id="" pattern="2" hide_zero="" text="##@,@@">
<source>R1</source>
</field>
<field x="20" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="">
<source>I4</source>
</field>
</section>
<section keep_with_next="1" type="Foot" height="3">
<field border="2" x="1" y="0.5" type="Linea" width="93" height="0" />
<field x="2" y="1" type="Data" width="10">
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="" hidden="" height="3" page_break="" can_break="" pattern="1">
<field border="2" x="1" y="0.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="93" codval="" height="0" id="" pattern="2" hide_zero="" text="" />
<field x="2" y="1" deactivated="" type="Data" hidden="" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="2" hide_zero="" text="">
<source>#SYSTEM.DATE</source>
</field>
<field x="90" y="1" type="Numero" align="right" width="3">
<field x="90" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="3" codval="" id="" pattern="2" hide_zero="" text="">
<source>#PAGE</source>
</field>
<field border="2" x="1" y="2.5" type="Linea" width="93" height="0" />
<field border="2" x="1" y="2.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="93" codval="" height="0" id="" pattern="2" hide_zero="" text="" />
</section>
<section keep_with_next="1" type="Foot" level="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="1" hidden="" page_break="" can_break="" pattern="1" />
<sql>USE IRD</sql>
</report>

View File

@ -81,6 +81,12 @@ BEGIN
FIELD R1
END
NUMBER F_NDKT 4
BEGIN
PROMPT 2 8 "N.Inv. Intra12/13"
FIELD I4
END
ENDPAGE
ENDMASK

View File

@ -1,9 +0,0 @@
#define INTRA_NUMREG "NUMREG"
#define INTRA_DATAREG "DATAREG"
#define INTRA_TIPOMOV "TIPOMOV"
#define INTRA_TIPOCF "TIPOCF"
#define INTRA_CODCF "CODCF"
#define INTRA_TOTDOC "TOTDOC"
#define INTRA_TOTDOCIMM "TOTDOCIMM"
#define INTRA_CODVAL "CODVAL"
#define INTRA_CAMBIO "CAMBIO"

View File

@ -1,30 +0,0 @@
#define RIEPRETT_TIPOINTRA "TIPOINTRA"
#define RIEPRETT_TIPO "TIPO"
#define RIEPRETT_ANNO "ANNO"
#define RIEPRETT_PERIODO "PERIODO"
#define RIEPRETT_NUMRIG "NUMRIG"
#define RIEPRETT_STATO "STATO"
#define RIEPRETT_PIVA "PIVA"
#define RIEPRETT_NATURA "NATURA"
#define RIEPRETT_NOMENCL "NOMENCL"
#define RIEPRETT_CONSEGNA "CONSEGNA"
#define RIEPRETT_TRASPORTO "TRASPORTO"
#define RIEPRETT_PAESE "PAESE"
#define RIEPRETT_PAESEORIG "PAESEORIG"
#define RIEPRETT_PROV "PROV"
#define RIEPRETT_AMMLIRE "AMMLIRE"
#define RIEPRETT_AMMVALUTA "AMMVALUTA"
#define RIEPRETT_CODVAL "CODVAL"
#define RIEPRETT_VALSTAT "VALSTAT"
#define RIEPRETT_MASSAKG "MASSAKG"
#define RIEPRETT_MASSAUMS "MASSAUMS"
#define RIEPRETT_ANNORETT "ANNORETT"
#define RIEPRETT_PERETT "PERETT"
#define RIEPRETT_NUMRETT "NUMRETT"
#define RIEPRETT_SEGNORETT "SEGNORETT"
#define RIEPRETT_FREQUENZA "FREQUENZA"
#define RIEPRETT_NUMREG "NUMREG"
#define RIEPRETT_CODSERV "CODSERV"
#define RIEPRETT_MODEROG "MODEROG"
#define RIEPRETT_MODINC "MODINC"
#define RIEPRETT_ISOPAG "ISOPAG"

View File

@ -1,20 +0,0 @@
#define RINTRA_NUMREG "NUMREG"
#define RINTRA_NUMRIG "NUMRIG"
#define RINTRA_TIPOINTRA "TIPOINTRA"
#define RINTRA_AMMLIRE "AMMLIRE"
#define RINTRA_AMMVALUTA "AMMVALUTA"
#define RINTRA_NATURA "NATURA"
#define RINTRA_CONSEGNA "CONSEGNA"
#define RINTRA_TRASPORTO "TRASPORTO"
#define RINTRA_NOMENCL "NOMENCL"
#define RINTRA_MASSAKG "MASSAKG"
#define RINTRA_MASSAUMS "MASSAUMS"
#define RINTRA_UMS "UMS"
#define RINTRA_VALSTAT "VALSTAT"
#define RINTRA_PAESE "PAESE"
#define RINTRA_PAESEORIG "PAESEORIG"
#define RINTRA_PROV "PROV"
#define RINTRA_CODSERV "CODSERV"
#define RINTRA_MODEROG "MODEROG"
#define RINTRA_MODINC "MODINC"
#define RINTRA_ISOPAG "ISOPAG"