campo-sirio/ps/ps0713200.cpp
guy a11eef1282 Personalizzazioni DB service
git-svn-id: svn://10.65.10.50/branches/R_10_00@22859 c028cbd2-c16b-5b4b-a496-9718f37d4682
2013-05-06 09:00:55 +00:00

206 lines
5.3 KiB
C++
Executable File
Raw Blame History

#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <reputils.h>
#include <utility.h>
#include <relation.h>
#include <reprint.h>
#include "../ca/calib01.h"
#include "../ca/calib02.h"
#include "../ca/commesse.h"
#include "../ca/movana.h"
#include "../ca/rmovana.h"
#include "ps0713lib.h"
#include "ps0713200a.h"
/////////////////////////////////
//// TIMPORTA_COMM_MSK ////
/////////////////////////////////
//Classe TImporta_comm_msk
class TImporta_comm_msk : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImporta_comm_msk();
};
//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)
{
return true;
}
//metodo costruttore
TImporta_comm_msk::TImporta_comm_msk()
: TAutomask("ps0713200a"){}
/////////////////////////////////
//// TIMPORTA_COMM_APP ////
/////////////////////////////////
//Classe TImporta_comm_app
class TImporta_comm_app : public TSkeleton_application
{
virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "cg";}
TImporta_comm_msk* _msk;
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
void scan_file(const TFilename& file, TAssoc_array& righe);
void importa_cms(TAssoc_array& righe);
bool transfer(const TFilename& file);
TImporta_comm_app() {};
};
//SCAN_FILE: metodo che scandisce il file ed evita i duplicati
void TImporta_comm_app::scan_file(const TFilename& file, TAssoc_array& righe)
{
TScanner s(file);
TToken_string rec(50, ',');
rec = s.line();
TProgind pi(fsize(file), "Scansione file in corso...", true, true);
//scorro tutto il file (per ogni riga devo riportare l'esito dell'importazione nel log)
while (s.ok())
{
if (!pi.addstatus((long)s.tellg()))
break;
TString16 idlavoro = rec.get(0); idlavoro.strip("\"");
//salto le righe vuote del file
if (idlavoro.empty())
continue;
//recupero i dati di interesse dal file;
//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 = sc;
TCommessa_string str(idlavoro, atoi(gr), atoi(co), atol(sc));
if(!righe.is_key(str))
righe.add(str, str);
rec = s.line();
}
}
void TImporta_comm_app::importa_cms(TAssoc_array& righe)
{
TProgind pi(righe.items(), "Importazione commesse in corso...", true, true);
TLog_report log("Importazione Commesse");
TLocalisamfile com(LF_COMMESSE);
FOR_EACH_ASSOC_OBJECT(righe, obj, key, itm)
{
if (!pi.addstatus(1))
break;
TCommessa_string cms(key);
TString80 codcms = cms.idlavoro();
TString str;
str << "La commessa " << codcms;
if (cache().get(LF_COMMESSE, codcms).empty())
{
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;
TString80 descr; descr << "Commessa " << codcms;
TBill bill(gruppo, conto, sotco);
const real percentuale(CENTO);
com.put(COMMESSE_CODCMS, codcms);
com.put(COMMESSE_DESCRIZ, descr);
com.put(COMMESSE_CODCONTO, codconto);
int err = com.rewrite_write();
if(err == NOERR)
{
str << " <20> stata inserita";
log.log(0, str);
}
else
{
str << " NON <20> stata inserita. Errore = " << err;
log.log(2, str);
}
}
else
{
str << " NON <20> stata inserita perch<63> esiste gi<67>";
log.log(2, str);
}
}
//stampo a video il log
TReport_book buc;
buc.add(log);
buc.preview();
}
TImporta_comm_app& app() { return (TImporta_comm_app&) main_app(); }
//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);
return true;
}
bool TImporta_comm_app::create()
{
_msk = new TImporta_comm_msk();
return TSkeleton_application::create();
}
bool TImporta_comm_app::destroy()
{
delete _msk;
return TApplication::destroy();
}
void TImporta_comm_app::main_loop()
{
KEY tasto;
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));
TString str;
if (transfer(name))
message_box(TR("Importazione commesse completata"));
else
error_box(TR("L'importazione non <20> andata a buon fine"));
}
}
int ps0713200 (int argc, char* argv[])
{
TImporta_comm_app main_app;
main_app.run(argc, argv, TR("Importazione Commesse"));
return true;
}