2008-03-17 22:05:14 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
|
|
|
|
#include <progind.h>
|
|
|
|
|
#include <reputils.h>
|
|
|
|
|
#include <utility.h>
|
|
|
|
|
#include <relation.h>
|
|
|
|
|
#include <reprint.h>
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
#include "../ca/calib01.h"
|
|
|
|
|
#include "../ca/calib02.h"
|
|
|
|
|
#include "../ca/movana.h"
|
|
|
|
|
#include "../ca/rmovana.h"
|
|
|
|
|
|
|
|
|
|
#include "ps0713lib.h"
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
|
|
|
|
#include "ps0713200a.h"
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
/////////////////////////////////
|
|
|
|
|
//// TIMPORTA_COMM_MSK ////
|
|
|
|
|
/////////////////////////////////
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
//Classe TImporta_comm_msk
|
|
|
|
|
class TImporta_comm_msk : public TAutomask
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
|
|
|
|
|
public:
|
2010-04-26 10:41:28 +00:00
|
|
|
|
TImporta_comm_msk();
|
2008-03-17 22:05:14 +00:00
|
|
|
|
};
|
2010-04-26 10:41:28 +00:00
|
|
|
|
|
|
|
|
|
//ON_FIELD_EVENT: metodo che gestisce i comportamenti dei vari campi della maschera
|
|
|
|
|
//(per adesso segnaposto)
|
|
|
|
|
bool TImporta_comm_msk::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
//metodo costruttore
|
2010-05-18 14:44:18 +00:00
|
|
|
|
TImporta_comm_msk::TImporta_comm_msk()
|
|
|
|
|
: TAutomask("ps0713200a"){}
|
2010-04-26 10:41:28 +00:00
|
|
|
|
|
|
|
|
|
/////////////////////////////////
|
|
|
|
|
//// TIMPORTA_COMM_APP ////
|
|
|
|
|
/////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TImporta_comm_app
|
|
|
|
|
class TImporta_comm_app : public TSkeleton_application
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
|
|
|
|
virtual bool check_autorization() const {return false;}
|
|
|
|
|
virtual const char * extra_modules() const {return "cg";}
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
TImporta_comm_msk* _msk;
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual bool create();
|
|
|
|
|
virtual bool destroy();
|
|
|
|
|
virtual void main_loop();
|
2010-04-26 10:41:28 +00:00
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
void scan_file(const TFilename& file, TAssoc_array& righe);
|
|
|
|
|
void importa_cms(TAssoc_array& righe);
|
|
|
|
|
|
2008-03-17 22:05:14 +00:00
|
|
|
|
bool transfer(const TFilename& file);
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
TImporta_comm_app() {};
|
2008-03-17 22:05:14 +00:00
|
|
|
|
};
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
//SCAN_FILE: metodo che scandisce il file ed evita i duplicati
|
|
|
|
|
void TImporta_comm_app::scan_file(const TFilename& file, TAssoc_array& righe)
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
|
|
|
|
TScanner s(file);
|
2010-04-26 10:41:28 +00:00
|
|
|
|
TToken_string rec(50, ',');
|
2008-03-17 22:05:14 +00:00
|
|
|
|
rec = s.line();
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
TProgind pi(fsize(file), "Scansione file in corso...", true, true);
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
//scorro tutto il file (per ogni riga devo riportare l'esito dell'importazione nel log)
|
2008-03-17 22:05:14 +00:00
|
|
|
|
while (s.ok())
|
|
|
|
|
{
|
|
|
|
|
if (!pi.addstatus(s.tellg()))
|
2010-04-26 10:41:28 +00:00
|
|
|
|
break;
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
TString idlavoro = rec.get(0); idlavoro.strip("\"");
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
|
|
|
|
//salto le righe vuote del file
|
2010-05-18 14:44:18 +00:00
|
|
|
|
if (idlavoro.empty())
|
2008-03-17 22:05:14 +00:00
|
|
|
|
continue;
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
//recupero i dati di interesse dal file;
|
2010-04-26 10:41:28 +00:00
|
|
|
|
//gruppo conto e sottoconto devono avere dei valori sensati
|
|
|
|
|
TString gr = rec.get(1); gr.strip("\""); (gr == "" || gr == "?") ? gr ="0" : gr = gr;
|
|
|
|
|
TString co = rec.get(2); co.strip("\""); (co == "" || co == "?") ? co ="0" : co = co;
|
|
|
|
|
TString sc = rec.get(3); sc.strip("\""); (sc == "" || sc == "?") ? sc ="0" : sc = gr;
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
TCommessa_string str(atol(idlavoro), atoi(gr), atoi(co), atol(sc));
|
|
|
|
|
if(!righe.is_key(str))
|
|
|
|
|
righe.add(str, str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TImporta_comm_app::importa_cms(TAssoc_array& righe)
|
|
|
|
|
{
|
|
|
|
|
TProgind pi(righe.items(), "Scansione file in corso...", true, true);
|
|
|
|
|
TLog_report log("Importazione Commesse");
|
|
|
|
|
|
2010-05-25 14:51:07 +00:00
|
|
|
|
TLocalisamfile com(LF_COMMESSE);
|
2010-05-18 14:44:18 +00:00
|
|
|
|
TLocalisamfile rip(LF_RIP);
|
|
|
|
|
TLocalisamfile rrip(LF_RRIP);
|
|
|
|
|
const TRectype& r = rip.last();
|
|
|
|
|
long codice = r.get_long("CODICE");
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
FOR_EACH_ASSOC_OBJECT(righe, obj, key, itm)
|
|
|
|
|
{
|
|
|
|
|
TCommessa_string cms(key);
|
|
|
|
|
TString80 codcms; codcms << cms.idlavoro();
|
|
|
|
|
|
|
|
|
|
TString str;
|
|
|
|
|
str << "La commessa " << codcms;
|
|
|
|
|
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE RIP KEY 4\n"
|
|
|
|
|
<< "FROM TIPO=\"B\" CODCOSTO=\"\" CODCMS=\"" << codcms << "\"\n"
|
|
|
|
|
<< "TO TIPO=\"B\" CODCOSTO=\"\" CODCMS=\"" << codcms << "\"\n";
|
|
|
|
|
const TISAM_recordset riprec(query);
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
if(riprec.empty())
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
2010-05-18 14:44:18 +00:00
|
|
|
|
const int gruppo = cms.gruppo(); TString4 grup; grup.format("%03d", gruppo);
|
|
|
|
|
const int conto = cms.conto(); TString4 cont; cont.format("%03d", conto);
|
|
|
|
|
const long sotco = cms.sotco(); TString8 sotc; sotc.format("%06ld", sotco);
|
|
|
|
|
TString80 codconto; codconto << grup << cont << sotc;
|
|
|
|
|
|
|
|
|
|
TString8 cod;
|
|
|
|
|
cod.format("%08ld", ++codice);
|
|
|
|
|
TString80 descr; descr << "Comessa " << codice;
|
|
|
|
|
|
|
|
|
|
TBill bill(gruppo, conto, sotco);
|
|
|
|
|
|
|
|
|
|
const real percentuale(CENTO);
|
|
|
|
|
|
2010-05-25 14:51:07 +00:00
|
|
|
|
TString80 desms; descms << "Commessa " << codcms;
|
|
|
|
|
|
|
|
|
|
com.put("CODCMS", codcms);
|
|
|
|
|
com.put("DESCRIZ", descms);
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
rip.put("TIPO", 'B');
|
|
|
|
|
rip.put("CODICE", cod);
|
|
|
|
|
rip.put("CODCMS", codcms);
|
|
|
|
|
rip.put("INDBIL", bill.indicatore_bilancio());
|
|
|
|
|
rip.put("DESCRIZ", descr);
|
|
|
|
|
|
|
|
|
|
rrip.put("TIPO", 'B');
|
|
|
|
|
rrip.put("CODICE", codice);
|
|
|
|
|
rrip.put("NRIGA", 1);
|
|
|
|
|
rrip.put("CODCMS", codcms);
|
|
|
|
|
rrip.put("CODCONTO", codconto);
|
|
|
|
|
rrip.put("RIPARTO", percentuale);
|
|
|
|
|
|
2010-05-25 14:51:07 +00:00
|
|
|
|
int err = com.write();
|
|
|
|
|
if(err == NOERR)
|
|
|
|
|
err = rip.write();
|
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
if(err == NOERR)
|
|
|
|
|
err = rrip.write();
|
|
|
|
|
|
|
|
|
|
if(err == NOERR)
|
|
|
|
|
{
|
|
|
|
|
str << codcms << " <20> stata inserita";
|
|
|
|
|
log.log(0, str);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
str << " NON <20> stata inserita. Errore = " << err;
|
|
|
|
|
log.log(2, str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
str << codcms << " NON <20> stata inserita perch<63> esiste gi<67>";
|
|
|
|
|
log.log(2, str);
|
2008-03-17 22:05:14 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2010-04-26 10:41:28 +00:00
|
|
|
|
//stampo a video il log
|
2008-03-17 22:05:14 +00:00
|
|
|
|
TReport_book buc;
|
|
|
|
|
buc.add(log);
|
|
|
|
|
buc.preview();
|
2010-05-18 14:44:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TImporta_comm_app& app() { return (TImporta_comm_app&) main_app(); }
|
2008-03-17 22:05:14 +00:00
|
|
|
|
|
2010-05-18 14:44:18 +00:00
|
|
|
|
//TRASNFER: metodo che effettivamente svolge l'elaborazione di importazione
|
|
|
|
|
bool TImporta_comm_app::transfer(const TFilename& file)
|
|
|
|
|
{
|
|
|
|
|
TAssoc_array righe;
|
|
|
|
|
scan_file(file, righe);
|
|
|
|
|
importa_cms(righe);
|
2008-03-17 22:05:14 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
bool TImporta_comm_app::create()
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
2010-04-26 10:41:28 +00:00
|
|
|
|
_msk = new TImporta_comm_msk();
|
2008-03-17 22:05:14 +00:00
|
|
|
|
return TSkeleton_application::create();
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
bool TImporta_comm_app::destroy()
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
2010-04-26 10:41:28 +00:00
|
|
|
|
delete _msk;
|
2008-03-17 22:05:14 +00:00
|
|
|
|
return TApplication::destroy();
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-26 10:41:28 +00:00
|
|
|
|
void TImporta_comm_app::main_loop()
|
2008-03-17 22:05:14 +00:00
|
|
|
|
{
|
2010-04-26 10:41:28 +00:00
|
|
|
|
KEY tasto;
|
2008-03-17 22:05:14 +00:00
|
|
|
|
tasto = _msk->run();
|
|
|
|
|
if (tasto == K_ENTER)
|
|
|
|
|
{
|
|
|
|
|
//genero il nome del file da caricare
|
|
|
|
|
TFilename name = _msk->get(F_PATH);
|
|
|
|
|
name.add(_msk->get(F_NAME));
|
2010-04-26 10:41:28 +00:00
|
|
|
|
TString str;
|
2008-03-17 22:05:14 +00:00
|
|
|
|
if (transfer(name))
|
2010-04-26 10:41:28 +00:00
|
|
|
|
message_box(TR("Importazione commesse completata"));
|
|
|
|
|
else
|
|
|
|
|
error_box(TR("L'importazione non <20> andata a buon fine"));
|
2008-03-17 22:05:14 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ps0713200 (int argc, char* argv[])
|
|
|
|
|
{
|
2010-04-26 10:41:28 +00:00
|
|
|
|
TImporta_comm_app main_app;
|
2008-03-17 22:05:14 +00:00
|
|
|
|
main_app.run(argc, argv, TR("Importazione Commesse"));
|
|
|
|
|
return true;
|
|
|
|
|
}
|