2011-04-20 15:22:04 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
|
|
|
|
#include <defmask.h>
|
|
|
|
|
#include <progind.h>
|
|
|
|
|
#include <relation.h>
|
|
|
|
|
#include <textset.h>
|
|
|
|
|
#include <utility.h>
|
|
|
|
|
|
|
|
|
|
#include "rdoc.h"
|
|
|
|
|
#include "../mr/rilprod.h"
|
|
|
|
|
#include "../mr/rrilprod.h"
|
2011-07-05 15:42:38 +00:00
|
|
|
|
#include "../ve/velib.h"
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
#include "ps1002.h"
|
|
|
|
|
#include "ps1002200a.h"
|
|
|
|
|
|
2011-07-05 15:42:38 +00:00
|
|
|
|
///////////////////////////////////
|
|
|
|
|
//// TACQUISIZIONE_CACHE ////
|
|
|
|
|
///////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//classe TAcquisizione_cache
|
|
|
|
|
class TBEM_cache : public TCache
|
|
|
|
|
{
|
|
|
|
|
TString4 _codnum;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void discarding(const THash_object* obj);
|
|
|
|
|
virtual TObject* key2obj(const char* key);
|
|
|
|
|
|
|
|
|
|
public:
|
2011-07-07 07:38:32 +00:00
|
|
|
|
TDocumento& doc(const int anno, const TString4 codnum, const long ndoc);
|
2011-07-05 15:42:38 +00:00
|
|
|
|
TBEM_cache();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//DISCARDING: metodo che salva un documento sul disco prima di eliminarlo dalla cache
|
|
|
|
|
void TBEM_cache::discarding(const THash_object* obj)
|
|
|
|
|
{
|
|
|
|
|
TDocumento& doc = (TDocumento&)obj->obj();
|
|
|
|
|
int err = doc.rewrite();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//KEY2OBJ: metodo che sceglie il documento giusto da disco in modo da poterlo continuare
|
|
|
|
|
TObject* TBEM_cache::key2obj(const char* key)
|
|
|
|
|
{
|
|
|
|
|
TToken_string chiave(key);
|
|
|
|
|
TDoc_key kdoc(key);
|
|
|
|
|
//chiave di doc
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE DOC\n"
|
|
|
|
|
<< "FROM PROVV=D ANNO=" << kdoc.anno() << " CODNUM=" << kdoc.codnum() << " NDOC=" << kdoc.ndoc() << "\n"
|
|
|
|
|
<< "TO PROVV=D ANNO=" << kdoc.anno() << " CODNUM=" << kdoc.codnum() << " NDOC=" << kdoc.ndoc();
|
|
|
|
|
TISAM_recordset rset(query);
|
|
|
|
|
|
|
|
|
|
TDocumento* doc = NULL;
|
|
|
|
|
|
|
|
|
|
if (rset.move_first())
|
|
|
|
|
doc = new TDocumento(rset.cursor()->curr());
|
|
|
|
|
return doc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//DOC: metodo che restituisce un puntatore ad un documento identificato dalla chiave doc
|
2011-07-07 07:38:32 +00:00
|
|
|
|
TDocumento& TBEM_cache::doc(const int anno, const TString4 codnum, const long ndoc)
|
2011-07-05 15:42:38 +00:00
|
|
|
|
{
|
2011-07-07 07:38:32 +00:00
|
|
|
|
TDoc_key kdoc(anno, codnum, ndoc);
|
2011-07-05 15:42:38 +00:00
|
|
|
|
return *(TDocumento*)objptr(kdoc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//metodo costruttore di una cache di 20 elementi
|
|
|
|
|
TBEM_cache::TBEM_cache() : TCache(20)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-20 15:22:04 +00:00
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
//// TIMPORTA_PRODUZIONE_REC ////
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TImporta_produzione_rec
|
|
|
|
|
class TImporta_produzione_rec: public TAS400_recordset
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TImporta_produzione_rec(const char* filename);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TImporta_produzione_rec::TImporta_produzione_rec(const char* filename)
|
2011-07-04 10:58:05 +00:00
|
|
|
|
: TAS400_recordset(TString("AS400(83)\n") << filename)
|
2011-04-20 15:22:04 +00:00
|
|
|
|
{
|
2011-07-04 10:58:05 +00:00
|
|
|
|
create_field("RDOCKEY", -1, 17, _alfafld, true); //chiave di RDOC
|
2011-04-20 15:22:04 +00:00
|
|
|
|
create_field("CODART", -1, 20, _alfafld, true); //codice articolo
|
|
|
|
|
create_field("CODLAV", -1, 10, _alfafld, true); //codice lavorazione
|
|
|
|
|
create_field("QTAPROD", -1, 15, _realfld, true); //quantit<69> prodotta
|
2011-07-04 10:58:05 +00:00
|
|
|
|
create_field("FLGSALDO", -1, 1, _alfafld, true); //flag a saldo
|
2011-04-20 15:22:04 +00:00
|
|
|
|
create_field("DATALAV", -1, 10, _alfafld, true); //data lavorazione
|
|
|
|
|
create_field("ORALAV", -1, 8, _alfafld, true); //ora lavorazione
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
//// TIMPORTA_PRODUZIONE_MSK ////
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TImporta_produzione_msk
|
|
|
|
|
class TImporta_produzione_msk : public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
int calcola_prog(const TString& codart, const TDate& data);
|
|
|
|
|
int calcola_nriga(const TString& codart, const TDate& data, const long prog);
|
|
|
|
|
bool genera_produzione(const TFilename& file);
|
|
|
|
|
void sposta_file(const TString& file);
|
|
|
|
|
bool chiudi_bem();
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
bool importa_file();
|
|
|
|
|
TImporta_produzione_msk();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool TImporta_produzione_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
|
{
|
|
|
|
|
switch (o.dlg())
|
|
|
|
|
{
|
2011-07-05 15:42:38 +00:00
|
|
|
|
case DLG_OK:
|
2011-04-20 15:22:04 +00:00
|
|
|
|
case DLG_ELABORA:
|
|
|
|
|
if(e == fe_button)
|
|
|
|
|
{
|
|
|
|
|
importa_file();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//CALCOLA_PROG: data la coppia articolo - data, calcola il progressivo successivo per completare la chiave
|
|
|
|
|
int TImporta_produzione_msk::calcola_prog(const TString& codart, const TDate& data)
|
|
|
|
|
{
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE RILPROD\n"
|
|
|
|
|
<< "FROM CODART=#CODART DATA=#DATA\n"
|
|
|
|
|
<< "TO CODART=#CODART DATA=#DATA\n"
|
|
|
|
|
<< "BY PROG";
|
|
|
|
|
|
|
|
|
|
TISAM_recordset rilprod(query);
|
|
|
|
|
rilprod.set_var("#CODART", codart);
|
|
|
|
|
rilprod.set_var("#DATA", data);
|
|
|
|
|
|
2011-07-08 15:53:14 +00:00
|
|
|
|
int prog = 0;
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
if(rilprod.move_last())
|
|
|
|
|
prog += rilprod.get(RILPROD_PROG).as_int();
|
|
|
|
|
return prog;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//CALCOLA_NRIGA: data la terna articolo - data - prog, calcola il numero riga successivo per completare la chiave
|
|
|
|
|
int TImporta_produzione_msk::calcola_nriga(const TString& codart, const TDate& data, const long prog)
|
|
|
|
|
{
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE RRILPROD\n"
|
|
|
|
|
<< "FROM CODART=#CODART DATA=#DATA PROG=#PROG\n"
|
|
|
|
|
<< "TO CODART=#CODART DATA=#DATA PROG=#PROG\n"
|
|
|
|
|
<< "BY NRIGA";
|
|
|
|
|
|
|
|
|
|
TISAM_recordset rrilprod(query);
|
|
|
|
|
rrilprod.set_var("#CODART", codart);
|
|
|
|
|
rrilprod.set_var("#DATA", data);
|
2011-07-04 10:58:05 +00:00
|
|
|
|
rrilprod.set_var("#PROG", prog);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
int nriga = 1;
|
|
|
|
|
|
|
|
|
|
if(rrilprod.move_last())
|
|
|
|
|
nriga += rrilprod.get(RRILPROD_NRIGA).as_int();
|
|
|
|
|
return nriga;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//SPOSTA_FILE: archivia i file elaborati
|
|
|
|
|
void TImporta_produzione_msk::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();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TImporta_produzione_msk::chiudi_bem()
|
|
|
|
|
{
|
|
|
|
|
const TDate data = get_date(F_DATA);
|
2011-07-05 15:42:38 +00:00
|
|
|
|
|
2011-04-20 15:22:04 +00:00
|
|
|
|
TLocalisamfile rilprod(LF_RILPROD);
|
2011-07-05 15:42:38 +00:00
|
|
|
|
TBEM_cache ca;
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
int err = NOERR;
|
|
|
|
|
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE RILPROD KEY 5";
|
|
|
|
|
if(data.ok())
|
|
|
|
|
query << "\nSELECT DATA<=#DATA";
|
2011-07-04 13:11:10 +00:00
|
|
|
|
query << "\nFROM PROVV=\"\" ANNOP=\"\" CODNUMP=\"\" NDOCP=\"\" NRIGAP=\"\""
|
|
|
|
|
<< "\nTO PROVV=\"\" ANNOP=\"\" CODNUMP=\"\" NDOCP=\"\" NRIGAP=\"\"";
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
TISAM_recordset testate(query);
|
2011-07-04 13:11:10 +00:00
|
|
|
|
if(data.ok())
|
|
|
|
|
testate.set_var("#DATA", data);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
for(bool ok = testate.move_first(); ok; ok = testate.move_next())
|
|
|
|
|
{
|
|
|
|
|
TRectype& trec = testate.cursor()->curr();
|
2011-07-07 07:38:32 +00:00
|
|
|
|
const char provv = trec.get(RILPROD_PROVV)[0];
|
|
|
|
|
const int anno = trec.get_int(RILPROD_ANNO);
|
|
|
|
|
const TString4 codnum = trec.get(RILPROD_CODNUM);
|
|
|
|
|
const int ndoc = trec.get_long(RILPROD_NDOC);
|
|
|
|
|
const int idriga = trec.get_int(RILPROD_NRIGA);
|
|
|
|
|
const real qta = trec.get_real(RILPROD_QTA);
|
|
|
|
|
const TString16 codlav = trec.get(RILPROD_OPERATORE);
|
|
|
|
|
const TDate data = trec.get_date(RILPROD_DATA);
|
|
|
|
|
|
|
|
|
|
TDocumento& doc = ca.doc(anno, codnum, ndoc);
|
2011-07-05 15:42:38 +00:00
|
|
|
|
if(!doc.empty())
|
2011-04-20 15:22:04 +00:00
|
|
|
|
{
|
2011-07-05 15:42:38 +00:00
|
|
|
|
const int nriga = doc.id2rownum(idriga);
|
|
|
|
|
TRiga_documento& row = doc[nriga];
|
2011-07-07 07:38:32 +00:00
|
|
|
|
|
|
|
|
|
if(row.get(RDOC_FASCMS) == codlav)
|
|
|
|
|
{
|
2011-07-08 09:49:00 +00:00
|
|
|
|
row.put(RDOC_DATACONS, data.string());
|
|
|
|
|
row.put(RDOC_QTAGG1, qta);
|
2011-07-07 07:38:32 +00:00
|
|
|
|
}
|
|
|
|
|
else if(row.get(RDOC_CODCMS) == codlav)
|
|
|
|
|
{
|
2011-07-08 09:49:00 +00:00
|
|
|
|
row.put(RDOC_CODAGG2, data.string());
|
|
|
|
|
row.put(RDOC_QTAGG2, qta);
|
2011-07-07 07:38:32 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
warning_box(TR("Riga BEM non trovata"));
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
trec.put(RILPROD_PROVVP, provv);
|
|
|
|
|
trec.put(RILPROD_ANNOP, anno);
|
|
|
|
|
trec.put(RILPROD_CODNUMP, codnum);
|
|
|
|
|
trec.put(RILPROD_NDOCP, ndoc);
|
|
|
|
|
trec.put(RILPROD_NRIGAP, idriga);
|
|
|
|
|
trec.rewrite(rilprod);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2011-07-05 15:42:38 +00:00
|
|
|
|
ca.destroy();
|
2011-04-20 15:22:04 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//GENERA_PRODUZIONE: effettiva elaborazione del file
|
|
|
|
|
bool TImporta_produzione_msk::genera_produzione(const TFilename& file)
|
|
|
|
|
{
|
|
|
|
|
int err = NOERR;
|
|
|
|
|
TImporta_produzione_rec recset(file);
|
|
|
|
|
|
|
|
|
|
TProgind pi(recset.items(), "Importazione in corso...", true, true);
|
|
|
|
|
|
|
|
|
|
TLocalisamfile tprod(LF_RILPROD);
|
|
|
|
|
TLocalisamfile rprod(LF_RRILPROD);
|
|
|
|
|
|
|
|
|
|
TAssoc_array tprod_ar;
|
2011-07-08 15:53:14 +00:00
|
|
|
|
TAssoc_array tprod_prog;
|
|
|
|
|
int prog = 0;
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
//scorro il file di input
|
|
|
|
|
for(bool ok = recset.move_first(); ok; ok = recset.move_next())
|
|
|
|
|
{
|
|
|
|
|
if (!pi.addstatus(1))
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
//estraggo i dati di interesse
|
2011-07-08 10:32:57 +00:00
|
|
|
|
TString80 chiavedoc = recset.get("RDOCKEY").as_string();
|
|
|
|
|
TToken_string krdoc(chiavedoc, '.');
|
2011-04-20 15:22:04 +00:00
|
|
|
|
const TString80 codart = recset.get("CODART").as_string();
|
2011-07-08 15:53:14 +00:00
|
|
|
|
TString16 codlav = recset.get("CODLAV").as_string();
|
2011-04-20 15:22:04 +00:00
|
|
|
|
const real qtaprod = recset.get("QTAPROD").as_real();
|
2011-07-04 10:58:05 +00:00
|
|
|
|
const bool flgsaldo = recset.get("FLGSALDO").as_string()[0] == 'S' ? true : false;
|
2011-04-20 15:22:04 +00:00
|
|
|
|
const TString16 datastr = recset.get("DATALAV").as_string();
|
|
|
|
|
const TString8 orastr = recset.get("ORALAV").as_string();
|
|
|
|
|
|
|
|
|
|
const char provv = 'D';
|
2011-07-08 15:53:14 +00:00
|
|
|
|
TString4 codnum = krdoc.get(0);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
const int anno = krdoc.get_int(1);
|
|
|
|
|
const long ndoc = krdoc.get_long(2);
|
|
|
|
|
const int idriga = krdoc.get_int(3);
|
|
|
|
|
|
|
|
|
|
const TDate datafine(atoi(datastr.left(2)), atoi(datastr.mid(3,2)), atoi(datastr.right(4)));
|
|
|
|
|
TString8 orafine(orastr); orafine.strip(":");
|
|
|
|
|
|
|
|
|
|
TToken_string key;
|
|
|
|
|
key.add(codart);
|
|
|
|
|
key.add(codlav);
|
2011-07-08 10:32:57 +00:00
|
|
|
|
key.add(chiavedoc.strip("."));
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
2011-07-08 15:53:14 +00:00
|
|
|
|
chiavedoc.strip(".");
|
2011-07-07 07:38:32 +00:00
|
|
|
|
|
|
|
|
|
TString query;
|
2011-07-08 09:49:00 +00:00
|
|
|
|
query << "USE RRILPROD\n"
|
|
|
|
|
<< "SELECT (DATAINI==" << datafine << ")&&(ORAINI==" << orafine << ")\n"
|
|
|
|
|
<< "FROM CODART=" << codart << " DATA=#DATA\n"
|
|
|
|
|
<< "TO CODART=" << codart << " DATA=#DATA";
|
|
|
|
|
TISAM_recordset righe(query);
|
|
|
|
|
righe.set_var("#DATA", datafine);
|
|
|
|
|
if(righe.items() > 0)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
query.cut(0);
|
2011-07-07 07:38:32 +00:00
|
|
|
|
query << "USE RILPROD KEY 4\n"
|
2011-07-08 15:53:14 +00:00
|
|
|
|
<< "SELECT OPERATORE==\"" << codlav.strip(" ") << "\"\n"
|
|
|
|
|
<< "FROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc << " NRIGA=" << idriga << "\n"
|
|
|
|
|
<< "TO PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc << " NRIGA=" << idriga;
|
2011-07-07 07:38:32 +00:00
|
|
|
|
TISAM_recordset testate(query);
|
|
|
|
|
|
|
|
|
|
if(!testate.empty())
|
|
|
|
|
{
|
|
|
|
|
TRectype& testata = testate.cursor()->curr();
|
|
|
|
|
real& qta = testata.get_real(RILPROD_QTA);
|
2011-07-08 15:53:14 +00:00
|
|
|
|
prog = testata.get_int(RILPROD_PROG);
|
2011-07-07 07:38:32 +00:00
|
|
|
|
qta += qtaprod;
|
2011-07-08 15:53:14 +00:00
|
|
|
|
testata.put(RILPROD_QTA, qta);
|
2011-07-07 07:38:32 +00:00
|
|
|
|
tprod_ar.add(key, testata);
|
2011-07-08 15:53:14 +00:00
|
|
|
|
err = testata.rewrite_write(tprod);
|
2011-07-07 07:38:32 +00:00
|
|
|
|
}
|
|
|
|
|
else if(!tprod_ar.is_key(key))
|
2011-04-20 15:22:04 +00:00
|
|
|
|
{
|
2011-07-08 15:53:14 +00:00
|
|
|
|
query.cut(0);
|
|
|
|
|
query << "USE RILPROD KEY 4 SELECT OPERATORE==\"" << codlav.strip(" ") << "\"\n"
|
|
|
|
|
<< "BY PROG\n"
|
|
|
|
|
<< "FROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc << "\n"
|
|
|
|
|
<< "TO PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc;
|
|
|
|
|
TISAM_recordset testate1(query);
|
|
|
|
|
|
|
|
|
|
prog = 1;
|
|
|
|
|
|
|
|
|
|
if(!testate1.empty())
|
|
|
|
|
{
|
|
|
|
|
testate1.move_last();
|
|
|
|
|
TRectype& testata = testate1.cursor()->curr();
|
|
|
|
|
prog = testata.get_int(RILPROD_PROG);
|
|
|
|
|
prog++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
query << "USE RILPROD\n"
|
|
|
|
|
<< "BY PROG\n"
|
|
|
|
|
<< "FROM CODART=" << codart << "DATA=#DATA\n"
|
|
|
|
|
<< "TO CODART=" << codart << "DATA=#DATA";
|
|
|
|
|
TISAM_recordset testate1(query);
|
|
|
|
|
testate1.set_var("#DATA", datafine);
|
|
|
|
|
|
|
|
|
|
testate1.move_last();
|
|
|
|
|
TRectype& testata = testate1.cursor()->curr();
|
|
|
|
|
prog = testata.get_int(RILPROD_PROG);
|
|
|
|
|
prog++;
|
|
|
|
|
}
|
|
|
|
|
|
2011-07-07 07:38:32 +00:00
|
|
|
|
//se non l'ho gi<67> fatto creo il record della testata, altrimenti aggiorno le quantit<69>
|
2011-04-20 15:22:04 +00:00
|
|
|
|
TRectype& testata = tprod.curr();
|
|
|
|
|
testata.zero();
|
2011-07-07 07:38:32 +00:00
|
|
|
|
testata.put(RILPROD_CODART, codart);
|
|
|
|
|
testata.put(RILPROD_DATA, datafine);
|
|
|
|
|
testata.put(RILPROD_PROG, prog);
|
|
|
|
|
testata.put(RILPROD_CODNUM, codnum);
|
|
|
|
|
testata.put(RILPROD_ANNO, anno);
|
|
|
|
|
testata.put(RILPROD_PROVV, provv);
|
|
|
|
|
testata.put(RILPROD_NDOC, ndoc);
|
|
|
|
|
testata.put(RILPROD_NRIGA, idriga);
|
|
|
|
|
testata.put(RILPROD_OPERATORE, codlav);
|
|
|
|
|
testata.put(RILPROD_QTA, qtaprod);
|
|
|
|
|
testata.put(RILPROD_CHIUSO, flgsaldo);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
2011-07-08 15:53:14 +00:00
|
|
|
|
err = testata.rewrite_write(tprod);
|
|
|
|
|
|
2011-04-20 15:22:04 +00:00
|
|
|
|
tprod_ar.add(key, testata);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
TRectype& testata = *(TRectype*)tprod_ar.objptr(key);
|
|
|
|
|
real& qta = testata.get_real(RILPROD_QTA);
|
|
|
|
|
qta += qtaprod;
|
|
|
|
|
prog = testata.get_int(RILPROD_PROG);
|
2011-07-08 10:10:06 +00:00
|
|
|
|
testata.put(RILPROD_QTA, qta);
|
2011-07-08 15:53:14 +00:00
|
|
|
|
err = testata.rewrite_write(tprod);
|
2011-07-08 09:49:00 +00:00
|
|
|
|
tprod_ar.add(key, testata);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//creo la riga corrispondente a quella letta da file
|
|
|
|
|
TRectype& riga = rprod.curr();
|
|
|
|
|
riga.zero();
|
2011-07-07 07:38:32 +00:00
|
|
|
|
riga.put(RRILPROD_CODART, codart);
|
|
|
|
|
riga.put(RRILPROD_DATA, datafine);
|
|
|
|
|
riga.put(RRILPROD_PROG, prog);
|
|
|
|
|
riga.put(RRILPROD_NRIGA, calcola_nriga(codart, datafine, prog));
|
|
|
|
|
riga.put(RRILPROD_DATAINI, datafine);
|
|
|
|
|
riga.put(RRILPROD_ORAINI, orafine);
|
|
|
|
|
riga.put(RRILPROD_DATAFINE, datafine);
|
|
|
|
|
riga.put(RRILPROD_ORAFINE, orafine);
|
|
|
|
|
riga.put(RRILPROD_OPERATORE, codlav);
|
|
|
|
|
riga.put(RRILPROD_QTA, qtaprod);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
|
|
|
|
|
err = riga.rewrite_write(rprod);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//salva le testate
|
2011-07-08 15:53:14 +00:00
|
|
|
|
/*FOR_EACH_ASSOC_OBJECT(tprod_ar, obj, key, itm)
|
2011-04-20 15:22:04 +00:00
|
|
|
|
{
|
2011-07-08 15:53:14 +00:00
|
|
|
|
TToken_string k(key);
|
2011-04-20 15:22:04 +00:00
|
|
|
|
TRectype& testata = *(TRectype*)itm;
|
|
|
|
|
err = testata.rewrite_write(tprod);
|
2011-07-08 15:53:14 +00:00
|
|
|
|
}*/
|
2011-04-20 15:22:04 +00:00
|
|
|
|
return err == NOERR ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//IMPORTA_FILE: controlla l'esistenza del file e richiama le effettive elaborazioni
|
|
|
|
|
bool TImporta_produzione_msk::importa_file()
|
|
|
|
|
{
|
|
|
|
|
const TFilename file = get(F_FILE);
|
|
|
|
|
|
|
|
|
|
if(file.exist())
|
|
|
|
|
{
|
|
|
|
|
if(genera_produzione(file))
|
|
|
|
|
{
|
|
|
|
|
sposta_file(file);
|
|
|
|
|
if(chiudi_bem())
|
|
|
|
|
message_box(TR("Importazione terminata con successo"));
|
|
|
|
|
else
|
|
|
|
|
error_box(TR("Errore durante l'aggiornamento dei documenti"));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
error_box(TR("Errore durante l'importazione del file"));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
error_box(TR("Il file selezionato non esiste; si prega di controllare"));
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TImporta_produzione_msk::TImporta_produzione_msk()
|
|
|
|
|
: TAutomask ("ps1002200a")
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
//// TIMPORTA_PRODUZIONE_APP ////
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TImporta_produzione_app
|
|
|
|
|
class TImporta_produzione_app : public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool check_autorization() const { return false; }
|
|
|
|
|
virtual const char* extra_modules() const { return "ve"; }
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
virtual bool create();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TImporta_produzione_app::main_loop()
|
|
|
|
|
{
|
|
|
|
|
TImporta_produzione_msk mask;
|
|
|
|
|
mask.run();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TImporta_produzione_app::create()
|
|
|
|
|
{
|
|
|
|
|
return TSkeleton_application::create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ps1002200 (int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TImporta_produzione_app main_app;
|
|
|
|
|
main_app.run(argc, argv, TR("Importa produzione da terminale"));
|
|
|
|
|
return true;
|
|
|
|
|
}
|