Files correlati : f135.dir f135.trr in0.exe in0200a.msk in0600a.msk in0700a.msk intbird.msk Commento : Aggiornamento intra fase 3 Interno : Inserimento rettifiche e riepiloghi e invii Mancano stampe di controllo
650 lines
18 KiB
C++
Executable File
650 lines
18 KiB
C++
Executable File
#include <applicat.h>
|
||
#include <progind.h>
|
||
#include <recarray.h>
|
||
#include <relation.h>
|
||
#include <tabutil.h>
|
||
|
||
#include "in0.h"
|
||
#include "in0200a.h"
|
||
#include "inlib01.h"
|
||
|
||
#include <nditte.h>
|
||
#include <anagr.h>
|
||
#include <riepintra.h>
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TRecord_intra
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TRecord_intra : public TString
|
||
{
|
||
int _ndec;
|
||
|
||
protected:
|
||
virtual void print_on(ostream& o) const;
|
||
|
||
public:
|
||
void reset(const TIntra_context& ic);
|
||
void reset_data();
|
||
void put(const char* str, int pos, int dim, const char* flags = "");
|
||
void put(real num, int pos, int dim, int dec = 0);
|
||
void put(long num, int pos, int dim);
|
||
void put(char chr, int pos);
|
||
void genera_testata(const TIntra_context& ic, long progr[], long tot[]);
|
||
void put(const TRectype& rec, TIntra_context& ic);
|
||
TRecord_intra();
|
||
};
|
||
|
||
// Scrive un campo generico sul record di invio
|
||
void TRecord_intra::put(const char* str, int pos, int dim, const char* flags)
|
||
{
|
||
CHECKD(pos > 0 && pos < size(), "Invalid field position:", pos);
|
||
CHECKD(dim > 0 && dim <= 200, "Invalid field dimension:", dim);
|
||
TString256 val(str);
|
||
if (val.len() < dim)
|
||
{
|
||
const bool rj = strchr(flags, 'R') != NULL;
|
||
const bool zf = strchr(flags, 'Z') != NULL;
|
||
if (rj)
|
||
val.right_just(dim, zf ? '0' : ' ');
|
||
else
|
||
val.left_just(dim, zf ? '0' : ' ');
|
||
}
|
||
else
|
||
val.cut(dim);
|
||
|
||
overwrite(val, pos-1);
|
||
}
|
||
|
||
// Scrive un campo numerico sul record di invio
|
||
void TRecord_intra::put(real num, int pos, int dim, int dec)
|
||
{
|
||
TString80 str;
|
||
if (!num.is_zero())
|
||
{
|
||
num.round(dec);
|
||
|
||
const bool negativo = num < ZERO;
|
||
if (negativo) num *= -1.0;
|
||
|
||
if (dec < 0)
|
||
{
|
||
str = num.string(dim-dec, 0, '0');
|
||
str.rtrim(-dec);
|
||
}
|
||
else
|
||
{
|
||
str = num.string(dim, dec, '0');
|
||
}
|
||
if (negativo)
|
||
str[dim-1] += 64;
|
||
}
|
||
put(str, pos, dim, "RZ");
|
||
}
|
||
|
||
// Scrive un campo intero sul record di invio
|
||
void TRecord_intra::put(long num, int pos, int dim)
|
||
{
|
||
TString16 str;
|
||
str.format("%0*ld", dim, num);
|
||
put(str, pos, dim, "RZ");
|
||
}
|
||
|
||
// Scrive un campo carattere sul record di invio
|
||
void TRecord_intra::put(char chr, int pos)
|
||
{
|
||
const char str[2] = { chr, '\0' };
|
||
put(str, pos, 1);
|
||
}
|
||
|
||
// Azzera il record
|
||
void TRecord_intra::reset(const TIntra_context& ic)
|
||
{
|
||
spaces();
|
||
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));
|
||
|
||
const TRectype& anagr = cache().get(LF_ANAG, cod);
|
||
|
||
put(anagr.get(ANA_PAIV), 6, 11);
|
||
put(ic._progr, 17, 6);
|
||
}
|
||
|
||
void TRecord_intra::reset_data()
|
||
{
|
||
const TString80 key = left(22);
|
||
spaces();
|
||
overwrite(key, 0);
|
||
}
|
||
|
||
// Scrive la testata con le informazioni della ditta
|
||
void TRecord_intra::genera_testata(const TIntra_context& ic, long progr[], long tot[])
|
||
{
|
||
reset(ic);
|
||
|
||
put('0', 23); // Tipo record frontespizio
|
||
put("", 24, 5, "RZ"); // Numero riga (0 per frontespizio)
|
||
|
||
put(ic._tipo, 29); // Tipo riepilogo
|
||
put(ic._anno % 100, 30, 2);
|
||
put(ic._freq, 32);
|
||
const int periodo = ic._freq == 'A' ? 0 : ic._periodo;
|
||
|
||
put(periodo, 33, 2);
|
||
|
||
TString16 cod = mid(5, 11); // Ricopia la parita iva della ditta
|
||
put(cod, 35, 11);
|
||
|
||
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
|
||
|
||
put(ditta.get_bool(NDT_PRESELEN) ? '1' : '0', 46);
|
||
put(ditta.get_bool(NDT_CESSIVA) ? '1' : '0', 47);
|
||
|
||
cod.cut(0);
|
||
cod << ditta.get_char(NDT_TIPOSOGDEL) << '|';
|
||
cod << ditta.get(NDT_CODSOGDEL);
|
||
if (cod.len() >= 3)
|
||
{
|
||
const TRectype& sogdel = cache().get(LF_ANAG, cod);
|
||
put(sogdel.get(ANA_PAIV), 48, 11);
|
||
}
|
||
else
|
||
put("", 48, 11, "Z");
|
||
|
||
for (int i = 0; i < 4; i++)
|
||
{
|
||
put(progr[i], 59 + i * 18, 5);
|
||
put(tot[i], 64 + i * 18, 13, _ndec);
|
||
}
|
||
}
|
||
|
||
// Scrive un intero record del file riepiloghi/rettifiche
|
||
void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
|
||
{
|
||
reset_data();
|
||
|
||
const int sezione = rec.get_int(RIEPINTRA_SEZIONE);
|
||
const TString & tipo = rec.get(RIEPINTRA_TIPO);
|
||
|
||
put((long) sezione, 23, 1);
|
||
put(rec.get_long(RIEPINTRA_NUMRIG), 24, 5); //?
|
||
if (tipo == "A")
|
||
{
|
||
switch (sezione)
|
||
{
|
||
case 1:
|
||
put(rec.get(RIEPINTRA_STATO), 29, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 31, 12);
|
||
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
|
||
put(rec.get_real(RIEPINTRA_AMMVALUTA), 56, 13);
|
||
put(rec.get_char(RIEPINTRA_NATURA), 69);
|
||
put(rec.get(RIEPINTRA_NOMENCL).mid(0, 4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi
|
||
put(rec.get(RIEPINTRA_NOMENCL).mid(4, 2), 74, 2, "Z");
|
||
put(rec.get(RIEPINTRA_NOMENCL).mid(6, 2), 76, 2, "Z");
|
||
if (ic._freq == 'M')
|
||
{
|
||
put(rec.get_real(RIEPINTRA_MASSAKG), 78, 10, 0);
|
||
put(rec.get_real(RIEPINTRA_MASSAUMS), 88, 10, 0);
|
||
put(rec.get_real(RIEPINTRA_VALSTAT), 98, 13, _ndec);
|
||
put(rec.get_char(RIEPINTRA_CONSEGNA), 111);
|
||
put(rec.get_char(RIEPINTRA_TRASPORTO), 112);
|
||
put(rec.get(RIEPINTRA_PAESE), 113, 2);
|
||
put(rec.get(RIEPINTRA_PAESEORIG), 115, 2);
|
||
put(rec.get(RIEPINTRA_PROV), 117, 2);
|
||
}
|
||
else
|
||
put("", 78, 100);
|
||
break;
|
||
case 2:
|
||
{
|
||
if (ic._freq == 'M')
|
||
put(rec.get(RIEPINTRA_PERETT), 29, 2, "RZ");
|
||
else
|
||
put("", 29, 2, "RZ");
|
||
if (ic._freq == 'T')
|
||
put(rec.get(RIEPINTRA_PERETT)[1], 31);
|
||
else
|
||
put('0', 31);
|
||
put(rec.get(RIEPINTRA_ANNORETT).right(2), 32, 2, "RZ");
|
||
put(rec.get(RIEPINTRA_STATO), 34, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 36, 12);
|
||
put(rec.get(RIEPINTRA_SEGNORETT), 48, 1);
|
||
put(rec.get_real(RIEPINTRA_AMMLIRE), 49, 13, _ndec);
|
||
put(rec.get_real(RIEPINTRA_AMMVALUTA), 62, 13);
|
||
put(rec.get_char(RIEPINTRA_NATURA), 75);
|
||
put(rec.get(RIEPINTRA_NOMENCL).mid(0, 4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi
|
||
put(rec.get(RIEPINTRA_NOMENCL).mid(4, 2), 80, 2, "Z");
|
||
put(rec.get(RIEPINTRA_NOMENCL).mid(6, 2), 82, 2, "Z");
|
||
if (ic._freq == 'M')
|
||
put(rec.get_real(RIEPINTRA_VALSTAT), 84, 13, _ndec);
|
||
else
|
||
put("", 84, 13);
|
||
}
|
||
break;
|
||
case 3:
|
||
put(rec.get(RIEPINTRA_STATO), 29, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 31, 12);
|
||
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
|
||
put(rec.get_real(RIEPINTRA_AMMVALUTA), 56, 13);
|
||
// put(numero fattura, 69, 15); facoltativo
|
||
// put(data fattura, 84, 6); facoltativo
|
||
put(rec.get(RIEPINTRA_CODSERV), 90, 6);
|
||
put(rec.get_char(RIEPINTRA_MODEROG), 96);
|
||
put(rec.get_char(RIEPINTRA_MODINCPAG), 97);
|
||
put(rec.get(RIEPINTRA_ISOINCPAG), 98, 2);
|
||
break;
|
||
case 4:
|
||
{
|
||
put(ic._uffdog, 29, 6);
|
||
put(rec.get(RIEPINTRA_ANNORETT).right(2), 35, 2, "RZ");
|
||
put(rec.get(RIEPINTRA_PROTEL), 37, 6, "RZ");
|
||
put(rec.get(RIEPINTRA_NUMRIGEL), 43, 5, "RZ");
|
||
put(rec.get(RIEPINTRA_STATO), 48, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 50, 12);
|
||
|
||
real ammlire = rec.get_real(RIEPINTRA_AMMLIRE);
|
||
|
||
if (rec.get_real(RIEPINTRA_SEGNORETT) == "+")
|
||
ammlire = -ammlire;
|
||
put(rec.get_real(RIEPINTRA_AMMLIRE), 62, 13, _ndec);
|
||
put(rec.get_real(RIEPINTRA_AMMVALUTA), 75, 13);
|
||
// put(numero fattura, 88, 15); facoltativo
|
||
// put(data fattura, 103, 6); facoltativo
|
||
put(rec.get(RIEPINTRA_CODSERV), 109, 6);
|
||
put(rec.get_char(RIEPINTRA_MODEROG), 115);
|
||
put(rec.get_char(RIEPINTRA_MODINCPAG), 116);
|
||
put(rec.get(RIEPINTRA_ISOINCPAG), 117, 2);
|
||
}
|
||
break;
|
||
default:
|
||
NFCHECK("sezione sconosciuta: %d", sezione);
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
switch (sezione)
|
||
{
|
||
case 1:
|
||
put(rec.get(RIEPINTRA_STATO), 29, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 31, 12);
|
||
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
|
||
put(rec.get_char(RIEPINTRA_NATURA), 56);
|
||
put(rec.get(RIEPINTRA_NOMENCL), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi
|
||
if (ic._freq == 'M')
|
||
{
|
||
put(rec.get_real(RIEPINTRA_MASSAKG), 65, 10);
|
||
put(rec.get_real(RIEPINTRA_MASSAUMS), 75, 10);
|
||
put(rec.get_real(RIEPINTRA_VALSTAT), 85, 13, _ndec);
|
||
put(rec.get_char(RIEPINTRA_CONSEGNA), 98);
|
||
put(rec.get_char(RIEPINTRA_TRASPORTO), 99);
|
||
put(rec.get(RIEPINTRA_PAESE), 100, 2);
|
||
put(rec.get(RIEPINTRA_PROV), 102, 2);
|
||
}
|
||
else
|
||
put("", 65, 100);
|
||
break;
|
||
case 2:
|
||
{
|
||
if (ic._freq == 'M')
|
||
put(rec.get(RIEPINTRA_PERETT), 29, 2, "RZ");
|
||
else
|
||
put("", 29, 2, "RZ");
|
||
if (ic._freq == 'T')
|
||
put(rec.get(RIEPINTRA_PERETT)[1], 31);
|
||
else
|
||
put('0', 31);
|
||
put(rec.get(RIEPINTRA_ANNORETT).right(2), 32, 2, "RZ");
|
||
put(rec.get(RIEPINTRA_STATO), 34, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 36, 12);
|
||
put(rec.get(RIEPINTRA_SEGNORETT), 48, 1);
|
||
put(abs(rec.get_real(RIEPINTRA_AMMLIRE)), 49, 13, _ndec);
|
||
put(rec.get(RIEPINTRA_NATURA), 62, 1);
|
||
put(rec.get(RIEPINTRA_NOMENCL), 63, 8, "Z"); // il campo NON viene spezzato in 3 pezzi
|
||
|
||
if (ic._freq == 'M')
|
||
put(abs(rec.get_real(RIEPINTRA_VALSTAT)), 71, 13, _ndec);
|
||
else
|
||
put("", 71, 13);
|
||
}
|
||
break;
|
||
case 3:
|
||
put(rec.get(RIEPINTRA_STATO), 29, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 31, 12);
|
||
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
|
||
// put(numero fattura, 56, 15); facoltativo
|
||
// put(data fattura, 71, 6); facoltativo
|
||
put(rec.get(RIEPINTRA_CODSERV), 77, 6);
|
||
put(rec.get_char(RIEPINTRA_MODEROG), 83);
|
||
put(rec.get_char(RIEPINTRA_MODINCPAG), 84);
|
||
put(rec.get(RIEPINTRA_ISOINCPAG), 85, 2);
|
||
break;
|
||
case 4:
|
||
{
|
||
put(ic._uffdog, 29, 6);
|
||
put(rec.get(RIEPINTRA_ANNORETT).right(2), 35, 2, "RZ");
|
||
put(rec.get(RIEPINTRA_PROTEL), 37, 6, "RZ");
|
||
put(rec.get(RIEPINTRA_NUMRIGEL), 43, 5, "RZ");
|
||
put(rec.get(RIEPINTRA_STATO), 48, 2);
|
||
put(rec.get(RIEPINTRA_PIVA), 50, 12);
|
||
|
||
real ammlire = rec.get_real(RIEPINTRA_AMMLIRE);
|
||
|
||
if (rec.get_real(RIEPINTRA_SEGNORETT) == "+")
|
||
ammlire = -ammlire;
|
||
put(ammlire, 2, 13, _ndec);
|
||
// put(numero fattura, 75, 15); facoltativo
|
||
// put(data fattura, 90, 6); facoltativo
|
||
put(rec.get(RIEPINTRA_CODSERV), 96, 6);
|
||
put(rec.get_char(RIEPINTRA_MODEROG), 102);
|
||
put(rec.get_char(RIEPINTRA_MODINCPAG), 103);
|
||
put(rec.get(RIEPINTRA_ISOINCPAG), 104, 2);
|
||
}
|
||
break;
|
||
default:
|
||
NFCHECK("sezione sconosciuta: %d", sezione);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Scrive su file il record
|
||
void TRecord_intra::print_on(ostream& o) const
|
||
{
|
||
((TRecord_intra*)this)->rtrim();
|
||
TString::print_on(o);
|
||
o << endl;
|
||
}
|
||
|
||
TRecord_intra::TRecord_intra() : TString(132), _ndec(0)
|
||
{ }
|
||
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TInvioIntra1_2_mask
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TInvioIntra1_2_mask : public TIntra_mask
|
||
{
|
||
long _progr[4];
|
||
long _totale[4];
|
||
|
||
protected:
|
||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
virtual short type_field() const { return F_TIPO; }
|
||
virtual short period_field() const { return F_PERIODO_M; }
|
||
virtual int anno() const { return get_int(F_ANNO); }
|
||
void calcola_repiloghi(const TRectype & rec);
|
||
void proponi_numero();
|
||
|
||
public:
|
||
void genera(char tipointra, char tipo, bool reset = false);
|
||
void update_testata(char tipo);
|
||
|
||
TInvioIntra1_2_mask::TInvioIntra1_2_mask() : TIntra_mask("in0200a") {}
|
||
};
|
||
|
||
void TInvioIntra1_2_mask::proponi_numero()
|
||
{
|
||
const char tip = tipo();
|
||
int a = anno(), p = periodo();
|
||
long d = 0;
|
||
|
||
TTable ird("IRD");
|
||
int err = ird.last();
|
||
while (err == NOERR)
|
||
{
|
||
const TString16 str = ird.get("CODTAB");
|
||
a = atoi(str.mid(1,4));
|
||
p = atoi(str.mid(5,2));
|
||
d = ird.get_long("I0");
|
||
if (tip == 'T' || tip == str[0])
|
||
break;
|
||
err = ird.prev();
|
||
}
|
||
|
||
if (anno() > a || periodo() > p)
|
||
set(F_NUMERO, d+1);
|
||
else
|
||
set(F_NUMERO, 1L);
|
||
}
|
||
|
||
bool TInvioIntra1_2_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case F_ANNO:
|
||
if (e == fe_init || e == fe_modify)
|
||
{
|
||
const int anno = atoi(o.get());
|
||
const char fa = frequenza(anno, 'A');
|
||
const char fc = frequenza(anno, 'C');
|
||
TList_field& list = (TList_field&)field(type_field());
|
||
TToken_string codes = "A|C";
|
||
TToken_string descr;
|
||
descr.add(TR("Acquisti"));
|
||
descr.add(TR("Cessioni"));
|
||
if (fa == fc)
|
||
{
|
||
codes.add("T");
|
||
descr.add(TR("Tutti"));
|
||
}
|
||
list.replace_items(codes, descr);
|
||
|
||
proponi_numero();
|
||
}
|
||
break;
|
||
case F_TIPO:
|
||
case F_PERIODO_M:
|
||
case F_PERIODO_T:
|
||
case F_PERIODO_A:
|
||
if (e == fe_modify)
|
||
proponi_numero();
|
||
break;
|
||
case F_RIEPILOGHI:
|
||
if (e == fe_button)
|
||
{
|
||
const char tip = tipo();
|
||
if (tip == 'T')
|
||
{
|
||
::genera_riepiloghi('A', anno(), periodo());
|
||
::genera_riepiloghi('C', anno(), periodo());
|
||
}
|
||
else
|
||
::genera_riepiloghi(tip, anno(), periodo());
|
||
}
|
||
break;
|
||
default:break;
|
||
}
|
||
return TIntra_mask::on_field_event(o, e, jolly);
|
||
}
|
||
|
||
void TInvioIntra1_2_mask::calcola_repiloghi(const TRectype & rec)
|
||
{
|
||
int sezione = rec.get_int(RIEPINTRA_SEZIONE);
|
||
real r = rec.get_real(RIEPINTRA_AMMLIRE).round(0); // Arrotonda all'Euro i valori intermedi
|
||
long val = atol(r.string());
|
||
|
||
if ((sezione == 2 || sezione == 4) && rec.get_char("SEGNORETT") == '-')
|
||
val = -val; // Rettifiche negative
|
||
_totale[--sezione] += val;
|
||
}
|
||
|
||
void TInvioIntra1_2_mask::genera(char tipointra, char tipo, bool reset)
|
||
{
|
||
TIntra_context ic;
|
||
|
||
ic._tipo = tipo;
|
||
ic._anno = anno();
|
||
ic._freq = frequenza(ic._anno);
|
||
ic._periodo = periodo();
|
||
ic._progr = get_long(F_NUMERO);
|
||
ic._uffdog = get(F_UFFDOG);
|
||
|
||
TString8 codtab; codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
|
||
|
||
TTable ird("IRD");
|
||
ird.put("CODTAB", codtab);
|
||
const bool exist = ird.read() == NOERR;
|
||
|
||
if (reset && exist)
|
||
{
|
||
const char* ac = tipo == 'A' ? TR("acquisti") : TR("cessioni");
|
||
if (!yesno_box(FR("Il file %s del periodo indicato <20> gi<67> stato generato:\n"
|
||
"Si desidera proseguire ugualmente?"), ac))
|
||
return;
|
||
}
|
||
|
||
TRelation rel(LF_RIEPRETT);
|
||
TRectype filter(LF_RIEPRETT);
|
||
|
||
filter.put("ANNO", ic._anno);
|
||
filter.put("PERIODO", periodo_str());
|
||
|
||
TCursor riep(&rel, "", 2, &filter, &filter);
|
||
const TRectype & rieprec = riep.curr();
|
||
const long items = riep.items();
|
||
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);
|
||
|
||
ofstream out(name, ios::out | ios::app);
|
||
|
||
if (!out.good())
|
||
{
|
||
cantwrite_box(name);
|
||
return;
|
||
}
|
||
if (reset)
|
||
{
|
||
_progr[0] = 0L;
|
||
_progr[1] = 0L;
|
||
_progr[2] = 0L;
|
||
_progr[3] = 0L;
|
||
_totale[0] = 0L;
|
||
_totale[1] = 0L;
|
||
_totale[2] = 0L;
|
||
_totale[3] = 0L;
|
||
}
|
||
|
||
TProgress_monitor pi(2 * items, TR("Generazione Intra 1/2"), false);
|
||
TRecord_intra rec;
|
||
|
||
for (riep = 0L; pi.add_status() && riep.pos() < items; ++riep)
|
||
calcola_repiloghi(rieprec);
|
||
rec.genera_testata(ic, _progr, _totale);
|
||
out << rec;
|
||
for (riep = 0L; pi.add_status() && riep.pos() < items; ++riep)
|
||
{
|
||
rec.put(rieprec, ic);
|
||
out << rec;
|
||
}
|
||
}
|
||
|
||
void TInvioIntra1_2_mask::update_testata(char tipo)
|
||
{
|
||
TIntra_context ic;
|
||
|
||
ic._tipo = tipo;
|
||
ic._anno = anno();
|
||
ic._freq = frequenza(ic._anno);
|
||
ic._periodo = periodo();
|
||
ic._progr = get_long(F_NUMERO);
|
||
TFilename name = get(F_PATH);
|
||
TString filename(get(F_CODUA));
|
||
TRecord_intra rec;
|
||
|
||
filename << format("%02d%02d%02d", today.day(), today.month(), get_int(F_NUMERO));
|
||
name.add(filename);
|
||
|
||
ofstream out(name, ios::out | ios::ate);
|
||
|
||
if (!out.good())
|
||
{
|
||
cantwrite_box(name);
|
||
return;
|
||
}
|
||
|
||
rec.genera_testata(ic, _progr, _totale);
|
||
out << rec;
|
||
TString8 codtab; codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
|
||
TTable ird("IRD");
|
||
|
||
set(F_NUMERO, ic._progr + 1);
|
||
|
||
ird.put("CODTAB", codtab);
|
||
ird.put("I0", ic._progr + 1);
|
||
ird.put("I2", _progr[0]);
|
||
ird.put("I3", _progr[1]);
|
||
ird.put("I4", _progr[2]);
|
||
ird.put("I5", _progr[3]);
|
||
ird.put("R2", _totale[0]);
|
||
ird.put("R3", _totale[1]);
|
||
ird.put("R4", _totale[2]);
|
||
ird.put("R5", _totale[3]);
|
||
ird.rewrite_write();
|
||
set(F_NUMERO, ic._progr + 1);
|
||
|
||
TString msg("Generato il file ");
|
||
|
||
msg << name;
|
||
message_box(msg);
|
||
}
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TInvioIntra1_2_app
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TInvioIntra1_2_app : public TSkeleton_application
|
||
{
|
||
protected:
|
||
virtual void 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);
|
||
m.load();
|
||
m.set(F_PROGGIORN, 1);
|
||
|
||
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
|
||
|
||
m.set(F_UFFDOG, ditta.get(NDT_UFFDOG));
|
||
while (m.run() == K_ENTER)
|
||
{
|
||
const char tip = m.tipo();
|
||
|
||
|
||
if (tip == 'T')
|
||
{
|
||
m.genera('B', 'C', true);
|
||
m.genera('B', 'A');
|
||
m.genera('S', 'C');
|
||
m.genera('S', 'A');
|
||
m.update_testata('A');
|
||
}
|
||
else
|
||
{
|
||
m.genera('B', tip, true);
|
||
m.genera('S', tip);
|
||
m.update_testata('C');
|
||
}
|
||
}
|
||
m.save();
|
||
}
|
||
|
||
int in0200(int argc, char* argv[])
|
||
{
|
||
TInvioIntra1_2_app a;
|
||
a.run(argc, argv, TR("Generazione Intra 1/2"));
|
||
return 0;
|
||
}
|