campo-sirio/ps/pd6342200.cpp
luca83 2efdfb0034 Patch level : 10.0 NO PATCH
Files correlati     : pd6342 pd6342a.msk
Ricompilazione Demo : [ ]
Commento            :
Crea movimenti di quadratura


git-svn-id: svn://10.65.10.50/branches/R_10_00@20961 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-10-07 09:47:35 +00:00

352 lines
8.9 KiB
C++
Executable File

#include <progind.h>
#include <recset.h>
#include <textset.h>
#include <utility.h>
#include "pd6342.h"
#include "pd6342200a.h"
#include "../ca/movana.h"
#include "../ca/rmovana.h"
#include "../ca/calib01.h"
#include "../ca/calib02.h"
class TImporta_da_BCS_rec : public TAS400_recordset
{
public:
TImporta_da_BCS_rec(const char* filename);
};
TImporta_da_BCS_rec::TImporta_da_BCS_rec(const char* filename)
: TAS400_recordset(TString("AS400(130)\n") << filename)
{
create_field("ANNO", 0, 4, _intfld); //anno di competenza
create_field("MESE", 5, 2, _intfld); //mese di competenza
create_field("GIORNO", 8, 2, _intfld); //giorno di competenza
create_field("CODCOSTO", 11, 15, _alfafld); //centro di costo
create_field("PCONTI", 27, 15, _alfafld); //centro di ricavo (o piano dei conti)
create_field("IMPORTO", 43, 12, _realfld); //importo lordo della prestazione moltiplicato per quantità
create_field("SEGNO", 56, 1, _alfafld); //segno importo (+ o -)
create_field("PROV", 59, 3, _alfafld, true, "FAT"); //provenienza (valore fisso FAT)
create_field("IDPROC", 62, 15, _alfafld); //ID della procedura inviante
create_field("CODPRES", 78, 8, _alfafld); //codice della prestazione
create_field("DESPRES", 87, 40, _alfafld); //descrizione della prestazione
}
static int sort_by_date(const TObject** o1, const TObject** o2)
{
const TString& r1 = *(TString*)*o1;
const TString& r2 = *(TString*)*o2;
const long d1 = (atol(r1.left(4)) * 10000) + (atol(r1.mid(5, 2)) * 100) + (atol(r1.mid(8, 2)));
const long d2 = (atol(r2.left(4)) * 10000) + (atol(r2.mid(5, 2)) * 100) + (atol(r2.mid(8, 2)));;
return d1 - d2;
}
///////////////////////////////////////////////////////////
// MASCHERA
///////////////////////////////////////////////////////////
class TImporta_da_BCS_msk : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImporta_da_BCS_msk();
virtual ~TImporta_da_BCS_msk() {}
};
bool TImporta_da_BCS_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
/*switch(o.dlg())
{
default:
break;
}*/
return true;
}
TImporta_da_BCS_msk::TImporta_da_BCS_msk() : TAutomask("pd6342200a")
{
}
///////////////////////////////////////////////////////////
// APPLICAZIONE
///////////////////////////////////////////////////////////
class TImporta_da_BCS_app : public TSkeleton_application
{
TImporta_da_BCS_msk* _mask;
TConfig* _configfile;
bool _has_ca;
protected:
virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "ca";}
virtual bool create(void);
virtual bool destroy(void);
void sposta_file(const TString& file);
void genera_movana(const TFilename& file);
void ini2mask();
void mask2ini();
bool elabora();
public:
virtual void main_loop();
};
void TImporta_da_BCS_app::mask2ini()
{
//carica i parametri del file di configurazione
_configfile->set_paragraph("MAIN");
for (int i = 0; i < _mask->fields() ; i++)
{
TMask_field& f = _mask->fld(i);
const TFieldref* fr = f.field();
if (fr != NULL)
_configfile->set(fr->name(), f.get());
}
}
void TImporta_da_BCS_app::ini2mask()
{
//carica i parametri del file di configurazione
_configfile->set_paragraph("MAIN");
for (int i = 0; i < _mask->fields() ; i++)
{
TMask_field& f = _mask->fld(i);
const TFieldref* fr = f.field();
if (fr != NULL)
{
const TString& val = _configfile->get(fr->name());
f.set(val);
}
}
}
void TImporta_da_BCS_app::sposta_file(const TString& file)
{
TFilename fileori = file;
TFilename path = fileori.path();
path.add("elaborati");
make_dir(path);
TString strname;
strname.format("%06d_%06d_%s", TDate(TODAY).date2ansi(), daytime(), (const char*)fileori.name());
TFilename filedest = path;
filedest.add(strname);
fcopy(fileori, filedest);
fileori.fremove();
}
void TImporta_da_BCS_app::genera_movana(const TFilename& file)
{
TLocalisamfile fmov(LF_MOVANA);
TDate dataold(NULLDATE);
const TDate oggi(TODAY);
const TString4 codcau = _mask->get(F_CODCAU);
TAnal_mov ana(0);
TImporta_da_BCS_rec recset(file);
recset.sort(sort_by_date);
TImporto totale;
TProgind pi(recset.items(), "Importazione in corso...", true, true);
for(bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.addstatus(1))
break;
const int anno = recset.get("ANNO").as_int();
if(anno <= 0)
continue;
const int mese = recset.get("MESE").as_int();
const int giorno = recset.get("GIORNO").as_int();
const TDate data(recset.get("GIORNO").as_int(), recset.get("MESE").as_int(), anno);
if(data != dataold)
{
if (!ana.empty())
{
ana.put(MOVANA_SEZIONE, totale.sezione());
ana.put(MOVANA_TOTDOC, totale.valore());
ana.rewrite_write(fmov);
totale.reset();
}
ana.zero();
ana.put(MOVANA_ANNOES, anno);
ana.put(MOVANA_DATAREG, oggi);
ana.put(MOVANA_DATACOMP, data);
ana.put(MOVANA_CODCAUS, codcau);
ana.put(MOVANA_DESCR, "Movimento Importato");
ana.put(MOVANA_TRASFERITO, true);
dataold = data;
}
TRectype& riga = ana.new_row();
TString16 impstr;
impstr << recset.get("SEGNO").as_string()[0] << recset.get("IMPORTO").as_string();
const real imp(impstr);
TImporto importo('A', imp);
importo.normalize();
TString16 cod = recset.get("CODPRES").as_string(); cod.trim();
TString80 descrizione;
descrizione << cod << '-' << recset.get("DESPRES").as_string();
TString80 codcosto = recset.get("CODCOSTO").as_string();
//il codcosto va formattato in base alla configurazione dell'analitica
const TMultilevel_code_info& cdcinfo = ca_multilevel_code_info(LF_CDC);
const TMultilevel_code_info& cominfo = ca_multilevel_code_info(LF_COMMESSE);
const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
int par_level;
int from = 0;
int len = 0;
//centro di costo
switch(cdcinfo.parent())
{
case LF_COMMESSE: par_level = cominfo.levels(); break;
case LF_FASI : par_level = fasinfo.levels(); break;
default : par_level = 0; break;
}
const int livcdc = cdcinfo.levels() - par_level;
if(livcdc > 0)
{
for(int i = 0; i < livcdc; i++)
len += cdcinfo.len(i);
riga.put(RMOVANA_CODCCOSTO, codcosto.mid(from, len));
}
from += len;
len = 0;
//commesse
switch(cominfo.parent())
{
case LF_CDC : par_level = cdcinfo.levels(); break;
case LF_FASI : par_level = fasinfo.levels(); break;
default : par_level = 0; break;
}
const int livcom = cominfo.levels() - par_level;
if(livcom > 0)
{
for(int i = 0; i < livcom; i++)
len += cominfo.len(i);
riga.put(RMOVANA_CODCMS, codcosto.mid(from, len));
}
from += len;
len = 0;
//fasi
switch(fasinfo.parent())
{
case LF_CDC : par_level = cdcinfo.levels(); break;
case LF_COMMESSE : par_level = cominfo.levels(); break;
default : par_level = 0; break;
}
const int livfas = fasinfo.levels() - par_level;
if(livfas > 0)
{
for(int i = 0; i < livfas; i++)
len += fasinfo.len(i);
riga.put(RMOVANA_CODFASE, codcosto.mid(from, len));
}
from += len;
riga.put(RMOVANA_ANNOES, anno);
riga.put(RMOVANA_SEZIONE, importo.sezione());
riga.put(RMOVANA_DATACOMP, data);
riga.put(RMOVANA_CODCONTO, recset.get("PCONTI").as_string());
riga.put(RMOVANA_DESCR, descrizione);
riga.put(RMOVANA_IMPORTO, importo.valore());
totale += importo;
}
if (!ana.empty())
{
ana.put(MOVANA_SEZIONE, totale.sezione());
ana.put(MOVANA_TOTDOC, totale.valore());
ana.rewrite_write(fmov);
}
}
bool TImporta_da_BCS_app::elabora()
{
TFilename file = _mask->get(F_FILE);
if(file.exist())
{
genera_movana(file);
sposta_file(file);
}
else
{
error_box(TR("Il file selezionato non esiste; si prega di controllare"));
return false;
}
return true;
}
bool TImporta_da_BCS_app::create()
{
_configfile = new TConfig("pd6342conf.ini", "MAIN");
return TSkeleton_application::create();
}
bool TImporta_da_BCS_app::destroy()
{
delete _configfile;
return TSkeleton_application::destroy();
}
void TImporta_da_BCS_app::main_loop()
{
_mask = new TImporta_da_BCS_msk;
ini2mask();
if (_mask->run() == K_ENTER)
{
mask2ini();
if (elabora())
message_box(TR("Importazione righe terminata"));
}
}
int pd6342200(int argc, char* argv[])
{
TImporta_da_BCS_app imp_anal;
imp_anal.run(argc, argv, TR("Importa Movimenti Analitici"));
return 0;
}