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;
file.add(fname);
TAssoc_array documenti;
TAssoc_array movimenti;
TLog_report logrep("");
//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:
if(e == fe_button)
{
TAssoc_array documenti;
genera_documenti(file, documenti, logrep);
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:
if(e == fe_button)
{
TAssoc_array movimenti;
prepara_movimenti(file, movimenti, logrep);
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"));
}
else
{
if (_auto == "A")
logrep.log(2, "Non è stato possibile generare nessun movimento di magazzino con i parametri fissati");
else
message_box(TR("Non è stato possibile generare nessun movimento di magazzino con i parametri fissati"));
}
}
break;
default: break;
}
TReport_book buc;
buc.add(logrep);
//genero il file .log che contiene gli errori
if (buc.pages() > 0)
if (logrep.rows() > 0)
{
TString str = file.name_only();
str << ".log";
TReport_book buc;
buc.add(logrep);
if (buc.pages() > 0)
{
TString str = file.name_only();
str << ".log";
TFilename log = file.path();
log.add(str);
TFilename log = file.path();
log.add(str);
buc.export_text(log, false);
buc.export_text(log, false);
}
}
if(_auto == "A")
@ -413,14 +417,15 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep)
{
if (!file.exist())
{
const char* msg = TR("ATTENZIONE: il file che si desidera importare non esiste!");
if (_auto == "A")
logrep.log(2, "ATTENZIONE: il file che si desidera importare non esiste!");
logrep.log(2, msg);
else
warning_box(TR("ATTENZIONE: il file che si desidera importare non esiste!"));
error_box(msg);
return false;
}
TLocalisamfile f(LF_PACCHI);
TFast_isamfile f(LF_PACCHI);
TScanner s(file);
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));
const bool ann = riga.mid(100, 1)[0] == 'S';
if(ann)
if (ann)
{
const TDate oggi(TODAY);
@ -480,7 +485,7 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep)
if (umart.empty())
{
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")
logrep.log(2, str);
else
@ -507,7 +512,7 @@ void TConta_pulito_msk::sposta_file(const TFilename& file)
make_dir(path);
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;
filedest.add(strname);
@ -778,7 +783,7 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m
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;
query << "USE PACCHI KEY 2\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("#ADATA", adata);
selrighe.move_first();
if (!selrighe.move_first())
return;
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())
{
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à
bool annullato = rp.is_annullato();
if(annullato)
quantita = - quantita;
if (annullato)
quantita = -quantita;
//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);
}
}
}
//GENERA_MOVMAG: metodo che genera i movimenti di magazzino dai pacchi
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;
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
TISAM_recordset mov("USE MOVMAG");
long nummov = 0;
if(mov.move_last())
nummov += mov.get(MOVMAG_NUMREG).as_int();
TLocalisamfile movi(LF_MOVMAG);
if (movi.last() == NOERR)
nummov = movi.get_long(MOVMAG_NUMREG);
/* 21-05-2014 Guido ha visto che queste 3 variabili non vengono mai utilizzate
//inizializzo le variabili di interesse
TDate dadata(TODAY); dadata.addmonth(-1); dadata.set_day(1);
TDate adata(TODAY); adata.addmonth();
TDate dadata(TODAY); dadata.addmonth(-1); dadata.set_day(1);
TDate adata(TODAY); adata.addmonth();
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")
{
dadata = get_date(F_DADATA);
adata = get_date(F_ADATA);
codcf = get_long(F_CODCF);
}
*/
//per ogni oggetto salvato in movimenti, creo un movimento di magazzino
const TEsercizi_contabili es;
FOR_EACH_ASSOC_OBJECT(movimenti, hobj, ansidate, obj)
{
TEsercizi_contabili es;
TDate data = (TDate)ansidate;
int annoes = es.date2esc(data);
const TDate data = ansidate;
const int annoes = es.date2esc(data);
TMov_mag movmag(++nummov);
movmag.put(MOVMAG_ANNOES, annoes);
movmag.put(MOVMAG_DATAREG, data);
movmag.put(MOVMAG_CODCAUS, causale.codice());
movmag.put(MOVMAG_DATACOMP, data);
//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);
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);
}
// Salva immediatamente testata per bloccare numero di registrazione
while (movmag.write(movi) == _isreinsert)
movmag.renum_mov(++nummov);
TAssoc_array& articoli = *(TAssoc_array*)obj;
@ -914,9 +903,7 @@ bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti)
{
TToken_string k(keyarticoli);
//recupero l'unità di misura principale di quest'articolo
TToken_string key;
key.add(k.get(0));
key.add(1);
TToken_string key; key.add(k.get(0)); key.add(1);
const TRectype& umart = cache().get(LF_UMART, key);
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_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;
@ -958,7 +974,7 @@ TConta_pulito_msk::TConta_pulito_msk():TAutomask("lv2900a")
_percli = true;
if (tmp.len() > 2)
_codcf = atoi(tmp.sub(2));
_codcf = atol(tmp.sub(2));
_permag = false;
}
@ -1017,6 +1033,12 @@ public:
//CREATE: metodo costruttore
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();
//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()
{
delete _msk;
return TApplication::destroy();
return TSkeleton_application::destroy();
}
//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()
: TAS400_recordset("AS400(42)")
{
/*
FILE DOTAZIONE.TXT
@ -218,17 +217,12 @@ Campo Tipo Posizione
-----------------------------------------------------
Codice Cliente Alfanumerico 1-20
Codice Articolo Alfanumerico 21-40
*/
create_field("CODCF", -1, 20, _alfafld, true); //codice cliente
create_field("CODART", -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("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo
}
///////////////////////////
//// TInvcon_skema_msk ////
///////////////////////////
@ -257,7 +251,7 @@ void TInvcon_skema_msk::esporta() const
TFilename file_dot = path; file_dot.add("dotazione.txt");
//preparo il recodset che contiene tutti i contratti validi
TString query;
TString query;
query << "USE LVCONDV\n"
<< "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))&&(CONTSPOR>0)\n"
<< "BY CODCF";
@ -266,7 +260,7 @@ TString query;
TISAM_recordset contratti(query);
contratti.set_var("#DATA", datasc);
if(contratti.items() > 0)
if (contratti.items() > 0)
{
TInvia_clienti_skema* recset_clienti = new TInvia_clienti_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 codcon = contratti.get(LVCONDV_CODCONT).as_int();
if(oldcodcf != codcf)
if (oldcodcf != codcf)
{
presenti.destroy();
oldcodcf = codcf;