Correzioni per Diana 2000

git-svn-id: svn://10.65.10.50/branches/R_10_00@22960 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2014-06-24 12:41:36 +00:00
parent 9f0c6387d2
commit 6bdcff9121
2 changed files with 91 additions and 75 deletions

View File

@ -299,9 +299,6 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo
TFilename file = path; TFilename file = path;
file.add(fname); file.add(fname);
TAssoc_array documenti;
TAssoc_array movimenti;
TLog_report logrep(""); TLog_report logrep("");
//a seconda del bottone premuto esegui un metodo diverso //a seconda del bottone premuto esegui un metodo diverso
@ -321,6 +318,7 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo
case DLG_PACKTCLI: case DLG_PACKTCLI:
if(e == fe_button) if(e == fe_button)
{ {
TAssoc_array documenti;
genera_documenti(file, documenti, logrep); genera_documenti(file, documenti, logrep);
if (documenti.items() > 0) if (documenti.items() > 0)
@ -371,6 +369,7 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo
case DLG_PACKTMAG: case DLG_PACKTMAG:
if(e == fe_button) if(e == fe_button)
{ {
TAssoc_array movimenti;
prepara_movimenti(file, movimenti, logrep); prepara_movimenti(file, movimenti, logrep);
if (movimenti.items() > 0) if (movimenti.items() > 0)
{ {
@ -379,27 +378,32 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo
message_box(TR("Generazione dei movimenti di magazzino terminata")); message_box(TR("Generazione dei movimenti di magazzino terminata"));
} }
else else
{
if (_auto == "A") if (_auto == "A")
logrep.log(2, "Non è stato possibile generare nessun movimento di magazzino con i parametri fissati"); logrep.log(2, "Non è stato possibile generare nessun movimento di magazzino con i parametri fissati");
else else
message_box(TR("Non è stato possibile generare nessun movimento di magazzino con i parametri fissati")); message_box(TR("Non è stato possibile generare nessun movimento di magazzino con i parametri fissati"));
}
} }
break; break;
default: break; default: break;
} }
TReport_book buc;
buc.add(logrep);
//genero il file .log che contiene gli errori //genero il file .log che contiene gli errori
if (buc.pages() > 0) if (logrep.rows() > 0)
{ {
TString str = file.name_only(); TReport_book buc;
str << ".log"; buc.add(logrep);
if (buc.pages() > 0)
{
TString str = file.name_only();
str << ".log";
TFilename log = file.path(); TFilename log = file.path();
log.add(str); log.add(str);
buc.export_text(log, false); buc.export_text(log, false);
}
} }
if(_auto == "A") if(_auto == "A")
@ -413,14 +417,15 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep)
{ {
if (!file.exist()) if (!file.exist())
{ {
const char* msg = TR("ATTENZIONE: il file che si desidera importare non esiste!");
if (_auto == "A") if (_auto == "A")
logrep.log(2, "ATTENZIONE: il file che si desidera importare non esiste!"); logrep.log(2, msg);
else else
warning_box(TR("ATTENZIONE: il file che si desidera importare non esiste!")); error_box(msg);
return false; return false;
} }
TLocalisamfile f(LF_PACCHI); TFast_isamfile f(LF_PACCHI);
TScanner s(file); TScanner s(file);
while (s.ok()) while (s.ok())
{ {
@ -441,7 +446,7 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep)
long codcf = atol(riga.mid(86, 6)); long codcf = atol(riga.mid(86, 6));
const bool ann = riga.mid(100, 1)[0] == 'S'; const bool ann = riga.mid(100, 1)[0] == 'S';
if(ann) if (ann)
{ {
const TDate oggi(TODAY); const TDate oggi(TODAY);
@ -480,7 +485,7 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep)
if (umart.empty()) if (umart.empty())
{ {
TString str; TString str;
str << "ATTENZIONE: non è stata trovata nessuna unità di misura valida per l'articolo " << codart; str << TR("ATTENZIONE: non è stata trovata nessuna unità di misura valida per l'articolo ") << codart;
if (_auto == "A") if (_auto == "A")
logrep.log(2, str); logrep.log(2, str);
else else
@ -507,7 +512,7 @@ void TConta_pulito_msk::sposta_file(const TFilename& file)
make_dir(path); make_dir(path);
TString strname; TString strname;
strname.format("%06d_%06d_%s", TDate(TODAY).date2ansi(), daytime(), (const char*)fileori.name()); strname.format("%08d_%06d_%s", TDate(TODAY).date2ansi(), daytime(), (const char*)fileori.name());
TFilename filedest = path; TFilename filedest = path;
filedest.add(strname); filedest.add(strname);
@ -778,7 +783,7 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m
codcf = get_long(F_CODCF); codcf = get_long(F_CODCF);
} }
//seleziona tutti i record del file pacchi da data a data che non hanno una bolla associata //seleziona tutti i record del file pacchi da data a data che non abbiano una bolla associata
TString query; TString query;
query << "USE PACCHI KEY 2\n"; query << "USE PACCHI KEY 2\n";
query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n"; query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n";
@ -789,10 +794,12 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m
selrighe.set_var("#DADATA", dadata); selrighe.set_var("#DADATA", dadata);
selrighe.set_var("#ADATA", adata); selrighe.set_var("#ADATA", adata);
selrighe.move_first(); if (!selrighe.move_first())
return;
TLocalisamfile& pacchi = selrighe.cursor()->file(); TLocalisamfile& pacchi = selrighe.cursor()->file();
//scorro tutti i pacchi trovato // scorro tutti i pacchi trovati
for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next()) for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next())
{ {
TRiga_pacco rp = selrighe.cursor()->curr(); TRiga_pacco rp = selrighe.cursor()->curr();
@ -801,8 +808,8 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m
//se il pacco risulta annullato, storno la quantità //se il pacco risulta annullato, storno la quantità
bool annullato = rp.is_annullato(); bool annullato = rp.is_annullato();
if(annullato) if (annullato)
quantita = - quantita; quantita = -quantita;
//recupero i dati di interesse dalla riga pacchi //recupero i dati di interesse dalla riga pacchi
@ -841,71 +848,53 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m
rp.rewrite(pacchi); rp.rewrite(pacchi);
} }
} }
} }
//GENERA_MOVMAG: metodo che genera i movimenti di magazzino dai pacchi //GENERA_MOVMAG: metodo che genera i movimenti di magazzino dai pacchi
bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti) bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti)
{ {
const TCausale_magazzino causale((ini_get_string(CONFIG_DITTA, "lv", "CAUCARMAG"))); const TCausale_magazzino causale(ini_get_string(CONFIG_DITTA, "lv", "CAUCARMAG"));
TString8 magazzino; TString8 magazzino;
magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGP"); magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG")
<< ini_get_string(CONFIG_DITTA, "lv", "CODMAGP");
TFast_isamfile movi(LF_MOVMAG);
//cerco l'ultimo numero di chiave in movmag //cerco l'ultimo numero di chiave in movmag
TISAM_recordset mov("USE MOVMAG");
long nummov = 0; long nummov = 0;
if(mov.move_last()) if (movi.last() == NOERR)
nummov += mov.get(MOVMAG_NUMREG).as_int(); nummov = movi.get_long(MOVMAG_NUMREG);
TLocalisamfile movi(LF_MOVMAG);
/* 21-05-2014 Guido ha visto che queste 3 variabili non vengono mai utilizzate
//inizializzo le variabili di interesse //inizializzo le variabili di interesse
TDate dadata(TODAY); dadata.addmonth(-1); dadata.set_day(1); TDate dadata(TODAY); dadata.addmonth(-1); dadata.set_day(1);
TDate adata(TODAY); adata.addmonth(); TDate adata(TODAY); adata.addmonth();
long codcf = _codcf; long codcf = _codcf;
//se non ho lanciato il programma da linea di comando, leggo i paramtri dalla maschera //se non ho lanciato il programma da linea di comando, leggo i parametri dalla maschera
if (_auto != "A") if (_auto != "A")
{ {
dadata = get_date(F_DADATA); dadata = get_date(F_DADATA);
adata = get_date(F_ADATA); adata = get_date(F_ADATA);
codcf = get_long(F_CODCF); codcf = get_long(F_CODCF);
} }
*/
//per ogni oggetto salvato in movimenti, creo un movimento di magazzino //per ogni oggetto salvato in movimenti, creo un movimento di magazzino
const TEsercizi_contabili es;
FOR_EACH_ASSOC_OBJECT(movimenti, hobj, ansidate, obj) FOR_EACH_ASSOC_OBJECT(movimenti, hobj, ansidate, obj)
{ {
TEsercizi_contabili es; const TDate data = ansidate;
TDate data = (TDate)ansidate; const int annoes = es.date2esc(data);
int annoes = es.date2esc(data);
TMov_mag movmag(++nummov); TMov_mag movmag(++nummov);
movmag.put(MOVMAG_ANNOES, annoes); movmag.put(MOVMAG_ANNOES, annoes);
movmag.put(MOVMAG_DATAREG, data); movmag.put(MOVMAG_DATAREG, data);
movmag.put(MOVMAG_CODCAUS, causale.codice()); movmag.put(MOVMAG_CODCAUS, causale.codice());
movmag.put(MOVMAG_DATACOMP, data); movmag.put(MOVMAG_DATACOMP, data);
//seleziona tutti i record del file pacchi da data a data che non hanno una bolla associata // Salva immediatamente testata per bloccare numero di registrazione
//per poter assegnare il riferimento al movimento di magazzino while (movmag.write(movi) == _isreinsert)
TString query; movmag.renum_mov(++nummov);
query << "USE PACCHI KEY 2\n";
query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n";
query << "FROM DATA=#DADATA\n";
query << "TO DATA=#ADATA";
TISAM_recordset selrighe(query);
selrighe.set_var("#DADATA", data);
selrighe.set_var("#ADATA", data);
selrighe.move_first();
TLocalisamfile& pacchi = selrighe.cursor()->file();
//scorro tutti i pacchi trovati
for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next())
{
TRiga_pacco rp = selrighe.cursor()->curr();
rp.set_movmag(nummov);
rp.rewrite(pacchi);
}
TAssoc_array& articoli = *(TAssoc_array*)obj; TAssoc_array& articoli = *(TAssoc_array*)obj;
@ -914,9 +903,7 @@ bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti)
{ {
TToken_string k(keyarticoli); TToken_string k(keyarticoli);
//recupero l'unità di misura principale di quest'articolo //recupero l'unità di misura principale di quest'articolo
TToken_string key; TToken_string key; key.add(k.get(0)); key.add(1);
key.add(k.get(0));
key.add(1);
const TRectype& umart = cache().get(LF_UMART, key); const TRectype& umart = cache().get(LF_UMART, key);
TString4 um = umart.get(UMART_UM); TString4 um = umart.get(UMART_UM);
@ -930,7 +917,36 @@ bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti)
rmovmag.put(RMOVMAG_UM, um); rmovmag.put(RMOVMAG_UM, um);
rmovmag.put(RMOVMAG_QUANT, quantita); rmovmag.put(RMOVMAG_QUANT, quantita);
} }
movmag.write(movi);
int err = movmag.rewrite(movi);
if (err == NOERR)
{
//seleziona tutti i record del file pacchi da data a data che non hanno una bolla associata
//per poter assegnare il riferimento al movimento di magazzino
TString query;
query << "USE PACCHI KEY 2\n";
query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n";
query << "FROM DATA=#DADATA\n";
query << "TO DATA=#ADATA";
TISAM_recordset selrighe(query);
selrighe.set_var("#DADATA", data);
selrighe.set_var("#ADATA", data);
if (selrighe.move_first())
{
TLocalisamfile& pacchi = selrighe.cursor()->file();
// scorro tutti i pacchi trovati
for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next())
{
TRiga_pacco rp = pacchi.curr();
rp.set_movmag(nummov);
const int err = rp.rewrite(pacchi);
if (err != NOERR)
return error_box(FR("Errore %d in aggiornamento numero di movimento sul file pacchi"), err);
}
}
}
} }
return true; return true;
@ -958,7 +974,7 @@ TConta_pulito_msk::TConta_pulito_msk():TAutomask("lv2900a")
_percli = true; _percli = true;
if (tmp.len() > 2) if (tmp.len() > 2)
_codcf = atoi(tmp.sub(2)); _codcf = atol(tmp.sub(2));
_permag = false; _permag = false;
} }
@ -1017,6 +1033,12 @@ public:
//CREATE: metodo costruttore //CREATE: metodo costruttore
bool TConta_pulito_app::create() bool TConta_pulito_app::create()
{ {
if (xvt_vobj_get_attr(NULL_WIN, ATTR_APPL_ALREADY_RUNNING))
{
xvt_dm_popup_error(TR("L'elaborazione pulito è già in esecuzione!"));
return false;
}
_msk = new TConta_pulito_msk(); _msk = new TConta_pulito_msk();
//se ho più di un parametro, allora lo sto lanciando da linea di comando, e ne devo tenere conto //se ho più di un parametro, allora lo sto lanciando da linea di comando, e ne devo tenere conto
@ -1050,7 +1072,7 @@ bool TConta_pulito_app::create()
bool TConta_pulito_app::destroy() bool TConta_pulito_app::destroy()
{ {
delete _msk; delete _msk;
return TApplication::destroy(); return TSkeleton_application::destroy();
} }
//TRANSFER: metodo che decide cosa effettivamente far fare al programma a seconda delle indicazioni ricevute //TRANSFER: metodo che decide cosa effettivamente far fare al programma a seconda delle indicazioni ricevute

View File

@ -210,7 +210,6 @@ void TInvia_dotazioni_skema::aggiungi_riga(const long codcf, const long codcont)
TInvia_dotazioni_skema::TInvia_dotazioni_skema() TInvia_dotazioni_skema::TInvia_dotazioni_skema()
: TAS400_recordset("AS400(42)") : TAS400_recordset("AS400(42)")
{ {
/* /*
FILE DOTAZIONE.TXT FILE DOTAZIONE.TXT
@ -218,17 +217,12 @@ Campo Tipo Posizione
----------------------------------------------------- -----------------------------------------------------
Codice Cliente Alfanumerico 1-20 Codice Cliente Alfanumerico 1-20
Codice Articolo Alfanumerico 21-40 Codice Articolo Alfanumerico 21-40
*/ */
create_field("CODCF", -1, 20, _alfafld, true); // codice cliente
create_field("CODCF", -1, 20, _alfafld, true); //codice cliente create_field("CODART", -1, 20, _alfafld, true); // codice articolo
create_field("CODART", -1, 20, _alfafld, true); //codice cliente
create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo
} }
/////////////////////////// ///////////////////////////
//// TInvcon_skema_msk //// //// TInvcon_skema_msk ////
/////////////////////////// ///////////////////////////
@ -257,7 +251,7 @@ void TInvcon_skema_msk::esporta() const
TFilename file_dot = path; file_dot.add("dotazione.txt"); TFilename file_dot = path; file_dot.add("dotazione.txt");
//preparo il recodset che contiene tutti i contratti validi //preparo il recodset che contiene tutti i contratti validi
TString query; TString query;
query << "USE LVCONDV\n" query << "USE LVCONDV\n"
<< "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))&&(CONTSPOR>0)\n" << "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))&&(CONTSPOR>0)\n"
<< "BY CODCF"; << "BY CODCF";
@ -266,7 +260,7 @@ TString query;
TISAM_recordset contratti(query); TISAM_recordset contratti(query);
contratti.set_var("#DATA", datasc); contratti.set_var("#DATA", datasc);
if(contratti.items() > 0) if (contratti.items() > 0)
{ {
TInvia_clienti_skema* recset_clienti = new TInvia_clienti_skema(); TInvia_clienti_skema* recset_clienti = new TInvia_clienti_skema();
TInvia_articoli_skema* recset_articoli = new TInvia_articoli_skema(); TInvia_articoli_skema* recset_articoli = new TInvia_articoli_skema();
@ -287,7 +281,7 @@ TString query;
const long codcf = contratti.get(LVCONDV_CODCF).as_int(); const long codcf = contratti.get(LVCONDV_CODCF).as_int();
const long codcon = contratti.get(LVCONDV_CODCONT).as_int(); const long codcon = contratti.get(LVCONDV_CODCONT).as_int();
if(oldcodcf != codcf) if (oldcodcf != codcf)
{ {
presenti.destroy(); presenti.destroy();
oldcodcf = codcf; oldcodcf = codcf;