2009-09-25 13:53:33 +00:00
|
|
|
|
#include <applicat.h>
|
2008-10-28 15:03:16 +00:00
|
|
|
|
#include <automask.h>
|
2009-08-04 08:19:24 +00:00
|
|
|
|
#include <reputils.h>
|
|
|
|
|
#include <reprint.h>
|
2008-10-28 15:03:16 +00:00
|
|
|
|
#include <textset.h>
|
2009-03-11 14:11:30 +00:00
|
|
|
|
#include <utility.h>
|
|
|
|
|
|
2009-07-28 07:50:30 +00:00
|
|
|
|
#include "lvlib.h"
|
2009-03-11 14:11:30 +00:00
|
|
|
|
#include "../ve/velib.h"
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-07-28 07:50:30 +00:00
|
|
|
|
#include "lvcondv.h"
|
|
|
|
|
#include "lvrcondv.h"
|
|
|
|
|
#include "lvrconsplan.h"
|
|
|
|
|
|
2009-03-12 12:15:09 +00:00
|
|
|
|
#include "lv2600a.h"
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
/////////////////////////////////
|
|
|
|
|
//// TACQUISIZIONE_MSK ////
|
|
|
|
|
/////////////////////////////////
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//classe TAcquisizione_msk
|
2008-10-28 15:03:16 +00:00
|
|
|
|
class TAcquisizione_msk: public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o,TField_event e,long jolly);
|
|
|
|
|
public:
|
|
|
|
|
TAcquisizione_msk();
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//ON_FIELD_EVENT: metodo che gestisce gli eventi sui campi della maschera
|
2008-10-28 15:03:16 +00:00
|
|
|
|
bool TAcquisizione_msk::on_field_event(TOperable_field& f,TField_event e,long jolly)
|
|
|
|
|
{
|
|
|
|
|
switch (f.dlg())
|
|
|
|
|
{
|
2009-03-16 16:30:01 +00:00
|
|
|
|
case F_PATH:
|
|
|
|
|
//se il campo <20> vuoto, provo a scriverlo dalla configurazione
|
2009-03-19 14:28:46 +00:00
|
|
|
|
if (e == fe_init && f.empty())
|
2009-03-16 16:30:01 +00:00
|
|
|
|
{
|
2009-03-19 14:28:46 +00:00
|
|
|
|
const TString& path = ini_get_string(CONFIG_DITTA, "lv", "PathContapezzi");
|
2009-03-16 16:30:01 +00:00
|
|
|
|
if (path.full())
|
|
|
|
|
f.set(path);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2009-03-19 14:28:46 +00:00
|
|
|
|
case F_S_NAME:
|
|
|
|
|
if (e == fe_modify)
|
|
|
|
|
{
|
|
|
|
|
TFilename n = f.get();
|
|
|
|
|
if (sfield(F_SHEET_NAME).items() == 1)
|
|
|
|
|
set(F_PATH, n.path());
|
|
|
|
|
if (n.starts_with(get(F_PATH), true))
|
|
|
|
|
f.set(n.name());
|
|
|
|
|
}
|
|
|
|
|
break;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
default:
|
|
|
|
|
break;
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TAcquisizione_msk::TAcquisizione_msk():TAutomask("lv2600a")
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
///////////////////////////////////
|
|
|
|
|
//// TACQUISIZIONE_CACHE ////
|
|
|
|
|
///////////////////////////////////
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//classe TAcquisizione_cache
|
2009-03-18 15:23:56 +00:00
|
|
|
|
class TAcquisizione_cache : public TCache
|
2008-10-28 15:03:16 +00:00
|
|
|
|
{
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TString4 _codnum, _tipodoc, _stato;
|
2009-08-19 09:47:20 +00:00
|
|
|
|
long _ndoc;
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void discarding(const THash_object* obj);
|
|
|
|
|
virtual TObject* key2obj(const char* key);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TDocumento& doc(const TDate& gg, const long cc);
|
|
|
|
|
TAcquisizione_cache();
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//DISCARDING: metodo che salva un documento sul disco prima di eliminarlo dalla cache
|
2008-10-28 15:03:16 +00:00
|
|
|
|
void TAcquisizione_cache::discarding(const THash_object* obj)
|
|
|
|
|
{
|
|
|
|
|
TDocumento& doc = (TDocumento&)obj->obj();
|
2009-03-18 15:23:56 +00:00
|
|
|
|
int err = doc.rewrite();
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//KEY2OBJ: metodo che sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'<27>
|
2008-10-28 15:03:16 +00:00
|
|
|
|
TObject* TAcquisizione_cache::key2obj(const char* key)
|
|
|
|
|
{
|
|
|
|
|
TToken_string chiave(key);
|
2009-08-24 08:42:34 +00:00
|
|
|
|
TDate datadoc = chiave.get();
|
2009-07-23 15:24:26 +00:00
|
|
|
|
const TDate datagen(TODAY);
|
2009-07-28 07:50:30 +00:00
|
|
|
|
TDate adata = datagen;
|
2009-08-19 09:47:20 +00:00
|
|
|
|
adata.addmonth();
|
2009-03-16 16:30:01 +00:00
|
|
|
|
const long codcf = chiave.get_long();
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-08-19 09:47:20 +00:00
|
|
|
|
if(_ndoc == 0)
|
|
|
|
|
{
|
|
|
|
|
TString query2;
|
|
|
|
|
query2 << "USE DOC\n"
|
2009-08-20 10:56:21 +00:00
|
|
|
|
<< "FROM PROVV=\"D\" ANNO=" << datadoc.year() << " CODNUM=\"" << _codnum << "\"\n"
|
|
|
|
|
<< "TO PROVV=\"D\" ANNO=" << datadoc.year() << " CODNUM=\"" << _codnum << "\"";
|
2009-08-19 09:47:20 +00:00
|
|
|
|
TISAM_recordset sporco(query2);
|
|
|
|
|
sporco.move_last();
|
|
|
|
|
_ndoc = sporco.get(DOC_NDOC).as_int();
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-18 15:23:56 +00:00
|
|
|
|
TString query = "USE DOC KEY 2\n";
|
2009-08-20 10:56:21 +00:00
|
|
|
|
query << "SELECT (TIPODOC=\"" << _tipodoc << "\")&&(STATO=\"" << _stato <<"\")\n";
|
2009-03-18 15:23:56 +00:00
|
|
|
|
query << "FROM TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << datadoc.year() << " DATADOC=" << datadoc << " CODNUM=" << _codnum << "\n";
|
|
|
|
|
query << "TO TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << datadoc.year() << " DATADOC=" << datadoc << " CODNUM=" << _codnum << "\n";
|
2009-07-29 17:08:19 +00:00
|
|
|
|
TISAM_recordset rset(query);
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TDocumento* doc = NULL;
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
if (rset.move_first())
|
|
|
|
|
doc = new TDocumento(rset.cursor()->curr());
|
2008-10-28 15:03:16 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2009-07-28 07:50:30 +00:00
|
|
|
|
TLaundry_contract cont(codcf, 0, datadoc);
|
|
|
|
|
const TString8 codcont = cont.get(LVCONDV_CODCONT);
|
|
|
|
|
|
|
|
|
|
TString query1 = "USE LVRCONSPLAN KEY 3\n";
|
2009-08-24 08:42:34 +00:00
|
|
|
|
query1 << "FROM CODCF=" << codcf << " CODCONT=" << codcont << " DTCONS=#DADATA\n";
|
|
|
|
|
query1 << "TO CODCF=" << codcf << " CODCONT=" << codcont << " DTCONS=#ADATA\n";
|
2009-07-28 07:50:30 +00:00
|
|
|
|
TISAM_recordset consegne(query1);
|
2009-08-24 08:42:34 +00:00
|
|
|
|
consegne.set_var("#DADATA", ++datadoc);
|
|
|
|
|
consegne.set_var("#ADATA", adata);
|
|
|
|
|
consegne.move_first();
|
2009-07-29 17:08:19 +00:00
|
|
|
|
const TDate dataprco = consegne.get(LVRCONSPLAN_DTCONS).as_date();
|
2009-07-28 07:50:30 +00:00
|
|
|
|
|
2009-08-24 08:42:34 +00:00
|
|
|
|
|
2009-08-19 09:47:20 +00:00
|
|
|
|
doc = new TDocumento('D', datadoc.year(), _codnum, ++_ndoc);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
doc->put(DOC_TIPODOC, _tipodoc);
|
|
|
|
|
doc->put(DOC_STATO, _stato);
|
|
|
|
|
doc->put(DOC_DATADOC, datadoc);
|
2009-03-18 15:23:56 +00:00
|
|
|
|
doc->put(DOC_TIPOCF, 'C');
|
2009-03-16 16:30:01 +00:00
|
|
|
|
doc->put(DOC_CODCF, codcf);
|
2009-07-28 07:50:30 +00:00
|
|
|
|
doc->put(DOC_CODCONT, codcont);
|
2009-08-10 14:13:34 +00:00
|
|
|
|
doc->put("DATACON", datadoc); //data conteggio
|
|
|
|
|
doc->put("DATAGEN", datagen); //data generazione del documento
|
2009-08-19 09:47:20 +00:00
|
|
|
|
doc->put("DATAPRCO", dataprco); //data prevista consegna
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
return doc;
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//DOC: metodo che restituisce un puntatore ad un documento identificato dalla coppia data - cliente
|
2008-10-28 15:03:16 +00:00
|
|
|
|
TDocumento& TAcquisizione_cache::doc(const TDate& gg, const long cc)
|
|
|
|
|
{
|
|
|
|
|
TString16 key;
|
|
|
|
|
key << gg.date2ansi() << '|' << cc;
|
|
|
|
|
return *(TDocumento*)objptr(key);
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//metodo costruttore di una cache di 17 elementi
|
2008-10-28 15:03:16 +00:00
|
|
|
|
TAcquisizione_cache::TAcquisizione_cache() : TCache(17)
|
|
|
|
|
{
|
2009-08-19 09:47:20 +00:00
|
|
|
|
_codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)");
|
|
|
|
|
_tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
|
2009-08-20 09:14:10 +00:00
|
|
|
|
_stato = cache().get("%TIP", _tipodoc, "S2").left(1);
|
2009-08-19 09:47:20 +00:00
|
|
|
|
|
|
|
|
|
_ndoc = 0;
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
////////////////////////////////////////////
|
|
|
|
|
//// TACQUISIZIONE_LAVANDERIE_APP ////
|
|
|
|
|
////////////////////////////////////////////
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//classe TAcquisizione_lavanderie_app
|
2008-10-28 15:03:16 +00:00
|
|
|
|
class TAcquisizione_lavanderie_app : public TSkeleton_application
|
|
|
|
|
{
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TAcquisizione_msk* _msk;
|
|
|
|
|
|
2008-10-28 15:03:16 +00:00
|
|
|
|
protected:
|
2009-03-16 16:30:01 +00:00
|
|
|
|
virtual bool create();
|
|
|
|
|
virtual bool destroy();
|
|
|
|
|
|
2009-08-20 09:14:10 +00:00
|
|
|
|
void elabora_file(const TString& file, TLog_report &rep);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
bool transfer();
|
|
|
|
|
virtual void main_loop();
|
2008-10-28 15:03:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//CREATE: metodo costruttore
|
|
|
|
|
bool TAcquisizione_lavanderie_app::create()
|
2008-10-28 15:03:16 +00:00
|
|
|
|
{
|
2009-03-16 16:30:01 +00:00
|
|
|
|
_msk = new TAcquisizione_msk();
|
|
|
|
|
TSheet_field& sheet = _msk->sfield(F_SHEET_NAME);
|
|
|
|
|
sheet.set_auto_append();
|
|
|
|
|
|
2009-03-19 15:33:34 +00:00
|
|
|
|
open_files(LF_DOC, LF_RIGHEDOC);
|
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
return TSkeleton_application::create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//DESTROY: metodo distruttore
|
|
|
|
|
bool TAcquisizione_lavanderie_app::destroy()
|
2009-03-18 15:23:56 +00:00
|
|
|
|
{
|
|
|
|
|
delete _msk;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
return TApplication::destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ELABORA_FILE: metodo che effettivamente fa l'elaborazione del file, creando i documenti
|
2009-08-20 09:14:10 +00:00
|
|
|
|
void TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report &rep)
|
2009-03-16 16:30:01 +00:00
|
|
|
|
{
|
|
|
|
|
TAcquisizione_cache ca;
|
|
|
|
|
|
2009-03-18 15:23:56 +00:00
|
|
|
|
bool sovrascrivi = true;
|
2009-08-20 09:14:10 +00:00
|
|
|
|
bool nuovo_cliente = true;
|
2009-03-18 15:23:56 +00:00
|
|
|
|
TAssoc_array deleted_docs;
|
2009-08-20 09:14:10 +00:00
|
|
|
|
TAssoc_array clienti;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//scandisco il file
|
|
|
|
|
TScanner s(file);
|
|
|
|
|
while (s.ok())
|
2008-10-28 15:03:16 +00:00
|
|
|
|
{
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TString80 riga = s.line();
|
|
|
|
|
if (riga.blank())
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
TDate datadoc;
|
2009-08-20 09:14:10 +00:00
|
|
|
|
long codcf = 0; TString8 codcf_str;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TString80 codart;
|
|
|
|
|
long qta;
|
|
|
|
|
long rotti;
|
2009-03-19 14:28:46 +00:00
|
|
|
|
long ndoc = 0;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TString16 tipo_conteggio;
|
|
|
|
|
TString80 operatore;
|
|
|
|
|
|
|
|
|
|
//controllo quale tracciato record devo seguire
|
|
|
|
|
if (riga.len() == 34) // -> MONTANARI
|
|
|
|
|
{
|
|
|
|
|
//leggo i campi dalla riga del file
|
2009-03-19 14:28:46 +00:00
|
|
|
|
const int d = atoi(riga.mid(0,2));
|
|
|
|
|
const int m = atoi(riga.mid(2,2));
|
|
|
|
|
const int y = atoi(riga.mid(4,4));
|
|
|
|
|
if (d > 0 && d <= 31 && m > 0 && m <= 12 && y > 2000)
|
|
|
|
|
{
|
2009-08-20 09:14:10 +00:00
|
|
|
|
codcf_str = riga.mid(8,6);
|
2009-03-19 14:28:46 +00:00
|
|
|
|
datadoc = TDate(d, m, y);
|
2009-08-20 09:14:10 +00:00
|
|
|
|
codcf = atol(codcf_str);
|
2009-03-19 14:28:46 +00:00
|
|
|
|
codart = riga.mid(14,8);
|
|
|
|
|
qta = atol(riga.mid(22,6));
|
|
|
|
|
rotti = atol(riga.mid(28,6));
|
2009-08-20 09:14:10 +00:00
|
|
|
|
|
|
|
|
|
if(!clienti.is_key(codcf_str))
|
|
|
|
|
{
|
|
|
|
|
clienti.add(codcf_str,codcf_str);
|
|
|
|
|
nuovo_cliente = true;
|
|
|
|
|
}
|
2009-03-19 14:28:46 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
continue;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
else if (riga.len() == 121) // ->SKEMA
|
2008-10-28 15:03:16 +00:00
|
|
|
|
{
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//leggo i campi dalla riga del file
|
2009-03-19 15:33:34 +00:00
|
|
|
|
const int y = atoi(riga.mid(0,4));
|
|
|
|
|
const int m = atoi(riga.mid(4,2));
|
|
|
|
|
const int d = atoi(riga.mid(6,2));
|
|
|
|
|
if (d > 0 && d <= 31 && m > 0 && m <= 12 && y > 2000)
|
2008-10-28 15:03:16 +00:00
|
|
|
|
{
|
2009-08-20 09:14:10 +00:00
|
|
|
|
codcf_str = riga.mid(28,20);
|
2009-03-19 15:33:34 +00:00
|
|
|
|
datadoc = TDate(d, m, y);
|
|
|
|
|
codart = riga.mid(8,20);
|
2009-08-20 09:14:10 +00:00
|
|
|
|
codcf = atol(codcf_str);
|
2009-03-19 15:33:34 +00:00
|
|
|
|
qta = atoi(riga.mid(48,11));
|
|
|
|
|
ndoc = atoi(riga.mid(59,11));
|
|
|
|
|
|
|
|
|
|
switch (atoi(riga.mid(70,11)))
|
|
|
|
|
{
|
|
|
|
|
case 1: tipo_conteggio = "Automatico"; break;
|
|
|
|
|
case 2: tipo_conteggio = "Manuale"; break;
|
|
|
|
|
case 3: tipo_conteggio = "Scarto"; break;
|
|
|
|
|
default: break;
|
2009-08-20 09:14:10 +00:00
|
|
|
|
}
|
|
|
|
|
operatore = riga.mid(81,40);
|
|
|
|
|
|
|
|
|
|
if(!clienti.is_key(codcf_str))
|
|
|
|
|
{
|
|
|
|
|
clienti.add(codcf_str,codcf_str);
|
|
|
|
|
nuovo_cliente = true;
|
|
|
|
|
}
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
2009-03-19 15:33:34 +00:00
|
|
|
|
else
|
|
|
|
|
continue;
|
2009-03-16 16:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool found = false;
|
|
|
|
|
|
|
|
|
|
TDocumento& doc = ca.doc(datadoc,codcf);
|
2009-03-18 15:23:56 +00:00
|
|
|
|
|
|
|
|
|
//se sto elaborando un nuovo file, ma i documenti che sto importando esistono gi<67>, chiedi cosa devo fare
|
2009-08-20 09:14:10 +00:00
|
|
|
|
if (doc.rows() > 0 && nuovo_cliente)
|
2009-03-16 16:30:01 +00:00
|
|
|
|
{
|
2009-08-21 08:22:55 +00:00
|
|
|
|
TString str;
|
|
|
|
|
str << "ATTENZIONE: i dati per il cliente " << codcf << " erano gi<67> stati importati in precedenza!\n"
|
|
|
|
|
<< "Si desidera continuare?\n"
|
|
|
|
|
<< "Premendo SI il documento verr<72> sovrascritto;\n"
|
|
|
|
|
<< "Premendo NO le quantit<69> verranno sommate a quelle esistenti\n"
|
|
|
|
|
<< "Premendo ANNULLA il documento non verr<72> modificato";
|
|
|
|
|
KEY k = yesnocancel_box(str);
|
2009-03-18 15:23:56 +00:00
|
|
|
|
switch (k)
|
|
|
|
|
{
|
|
|
|
|
case K_YES: sovrascrivi = true; break;
|
|
|
|
|
case K_NO: sovrascrivi = false; break;
|
2009-08-20 14:36:47 +00:00
|
|
|
|
default: //in questo modo viene chiesto una sola volta per cliente
|
|
|
|
|
{
|
|
|
|
|
nuovo_cliente = false;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
2009-03-18 15:23:56 +00:00
|
|
|
|
}
|
2009-08-19 09:47:20 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!doc.get_date("DATAPRCO").ok())
|
|
|
|
|
{
|
|
|
|
|
TString msg;
|
|
|
|
|
msg << TR("Il documento ") << doc.get(DOC_NDOC) << TR(" del ") << doc.get(DOC_DATADOC)
|
|
|
|
|
<< TR(" del cliente ") << codcf << TR(" non ha data di prevista consegna.");
|
|
|
|
|
rep.log(1,msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-08-04 08:19:24 +00:00
|
|
|
|
|
2009-08-20 14:36:47 +00:00
|
|
|
|
nuovo_cliente = false;
|
|
|
|
|
|
2009-03-18 15:23:56 +00:00
|
|
|
|
//se voglio sovrascrivere i file, e non l'ho mai cancellato, allora svuotalo effettivamente
|
|
|
|
|
const TString8 numdoc = doc.get(DOC_NDOC);
|
|
|
|
|
if (sovrascrivi && !deleted_docs.is_key(numdoc))
|
|
|
|
|
{
|
|
|
|
|
doc.destroy_rows();
|
|
|
|
|
deleted_docs.add(numdoc, numdoc);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i <= doc.rows(); i++)
|
|
|
|
|
{
|
2009-03-18 15:23:56 +00:00
|
|
|
|
//cerco se esiste gi<67> una riga sul documento selezionato per quell'articolo;
|
|
|
|
|
//se la trovo sommo la quantit<69> appena letta a quella gi<67> esistente,
|
|
|
|
|
//altrimenti creo una nuova riga documento
|
2009-03-16 16:30:01 +00:00
|
|
|
|
TRiga_documento& rdoc = doc[i];
|
2009-03-18 15:23:56 +00:00
|
|
|
|
TString80 codart_doc = rdoc.get(RDOC_CODART);
|
|
|
|
|
codart_doc.trim();
|
|
|
|
|
|
|
|
|
|
if (codart_doc == codart.trim())
|
2008-10-28 15:03:16 +00:00
|
|
|
|
{
|
2009-03-18 15:23:56 +00:00
|
|
|
|
long qtardoc = rdoc.get_long(RDOC_QTAGG1);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
qtardoc += qta;
|
2009-03-18 15:23:56 +00:00
|
|
|
|
rdoc.put(RDOC_QTAGG1,qtardoc);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
found = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-10-28 15:03:16 +00:00
|
|
|
|
|
2009-03-19 14:28:46 +00:00
|
|
|
|
if (!found)
|
2009-03-16 16:30:01 +00:00
|
|
|
|
{
|
2009-03-18 15:23:56 +00:00
|
|
|
|
const TRectype& anamag = cache().get(LF_ANAMAG, codart);
|
|
|
|
|
|
|
|
|
|
TRiga_documento& rdoc = doc.new_row("22");
|
|
|
|
|
rdoc.put(RDOC_CODART, codart);
|
|
|
|
|
rdoc.put(RDOC_DESCR, anamag.get(ANAMAG_DESCR));
|
|
|
|
|
rdoc.put(RDOC_CODARTMAG, codart);
|
|
|
|
|
rdoc.put(RDOC_CHECKED, 'X');
|
2009-07-28 07:50:30 +00:00
|
|
|
|
rdoc.put(RDOC_CODAGG1, ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV"));
|
2009-03-18 15:23:56 +00:00
|
|
|
|
rdoc.put(RDOC_QTAGG1, qta);
|
|
|
|
|
rdoc.put(RDOC_QTA, rotti);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-07-28 07:50:30 +00:00
|
|
|
|
|
2009-07-28 10:58:02 +00:00
|
|
|
|
//rinomino il file in uso
|
2009-07-28 08:07:39 +00:00
|
|
|
|
TFilename fnameini(file);
|
2009-07-28 10:58:02 +00:00
|
|
|
|
TFilename fnamefin = fnameini;
|
|
|
|
|
fnamefin.insert("_sav", fnameini.find(".dat"));
|
2009-07-28 08:07:39 +00:00
|
|
|
|
|
2009-07-28 10:58:02 +00:00
|
|
|
|
//se non faccio la close non posso rimuovere il file
|
|
|
|
|
s.close();
|
2009-07-28 08:07:39 +00:00
|
|
|
|
fcopy(fnameini, fnamefin);
|
2009-07-28 10:58:02 +00:00
|
|
|
|
fnameini.fremove();
|
2009-07-28 08:07:39 +00:00
|
|
|
|
|
2009-03-19 15:33:34 +00:00
|
|
|
|
if (ca.empty())
|
|
|
|
|
{
|
|
|
|
|
warning_box(TR("ATTENZIONE: il file importato non ha generato nessun documento; controllare che il tracciato record sia coerente"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ca.destroy();
|
|
|
|
|
deleted_docs.destroy();
|
|
|
|
|
}
|
2009-03-16 16:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TRANSFER: metodo che scorre i campi nome e, se sono pieni, richiama il metodo
|
|
|
|
|
//ELABORA_FILE(), che effettivamente fa l'elaborazione
|
|
|
|
|
bool TAcquisizione_lavanderie_app::transfer()
|
|
|
|
|
{
|
|
|
|
|
//prendo il path dalla maschera
|
|
|
|
|
const TString& path = _msk->get(F_PATH);
|
|
|
|
|
TSheet_field& sheet = _msk->sfield(F_SHEET_NAME);
|
|
|
|
|
TFilename file;
|
2009-08-19 09:47:20 +00:00
|
|
|
|
|
|
|
|
|
TLog_report logrep("Aquisizione da contapezzi");
|
|
|
|
|
logrep.kill_duplicates(true);
|
2009-08-04 08:19:24 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
//per ogni riga dello sheet, leggo il suo contenuto, se contiene dei caratteri jolly
|
|
|
|
|
//preparo la lista dei file che soddisfano la maschera in quella directory e li elaboro
|
|
|
|
|
//tutti, altrimenti elaboro esattamente il file che <20> scritto sullo sheet
|
|
|
|
|
FOR_EACH_SHEET_ROW(sheet, r1, row1)
|
|
|
|
|
{
|
|
|
|
|
if(row1->full())
|
|
|
|
|
{
|
2009-03-19 14:28:46 +00:00
|
|
|
|
if (row1->find('/') >= 0 || row1->find('\\') >= 0)
|
|
|
|
|
file = *row1;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
file = path;
|
|
|
|
|
file.add(*row1);
|
|
|
|
|
}
|
2009-03-16 16:30:01 +00:00
|
|
|
|
|
|
|
|
|
if (file.find('*') >= 0 || file.find('?') >= 0)
|
|
|
|
|
{
|
2009-03-19 14:28:46 +00:00
|
|
|
|
TString_array lista_file;
|
|
|
|
|
list_files(file, lista_file);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
|
2009-07-28 08:07:39 +00:00
|
|
|
|
FOR_EACH_ARRAY_ROW(lista_file, r2, row2)
|
2009-08-20 09:14:10 +00:00
|
|
|
|
elabora_file(*row2, logrep);
|
2009-03-16 16:30:01 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2009-08-20 09:14:10 +00:00
|
|
|
|
elabora_file(file, logrep);
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-08-10 14:13:34 +00:00
|
|
|
|
|
2009-08-19 09:47:20 +00:00
|
|
|
|
TReport_book buc;
|
|
|
|
|
buc.add(logrep);
|
|
|
|
|
if (buc.pages() > 0)
|
|
|
|
|
buc.preview();
|
|
|
|
|
else
|
|
|
|
|
message_box(TR("Generazione terminata"));
|
2009-08-04 08:19:24 +00:00
|
|
|
|
|
2009-03-16 16:30:01 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TAcquisizione_lavanderie_app::main_loop()
|
|
|
|
|
{
|
|
|
|
|
while (_msk->run() == K_ENTER)
|
|
|
|
|
transfer();
|
2008-10-28 15:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int lv2600(int argc, char *argv[])
|
|
|
|
|
{
|
|
|
|
|
TAcquisizione_lavanderie_app a;
|
|
|
|
|
a.run (argc, argv, "Acquisizione bolle di rientro/ritiro");
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|