Commit Generale Post terremoto

git-svn-id: svn://10.65.10.50/branches/R_10_00@22666 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-05-29 08:52:37 +00:00
parent 41582a974e
commit 4be3336e19
31 changed files with 960 additions and 793 deletions

View File

@ -2059,7 +2059,7 @@ bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite,
log(FR("* Inizio calcolo situazione %d cespite %s"), tipo_sit, (const char*)idcespite); log(FR("* Inizio calcolo situazione %d cespite %s"), tipo_sit, (const char*)idcespite);
#ifdef DBG #ifdef DBG
if (tipo_sit == 1 && atol(idcespite) == 2004049L) if (tipo_sit == 1 && atol(idcespite) == 1362)
tipo_sit = 1; // Put your breakpoint here tipo_sit = 1; // Put your breakpoint here
#endif #endif

View File

@ -94,6 +94,8 @@ protected:
bool genera_nomi_output(const char* nome, TFilename& txt, TFilename& tmp) const; bool genera_nomi_output(const char* nome, TFilename& txt, TFilename& tmp) const;
bool salva_recordset(TRecordset& recset, const char* nome) const; bool salva_recordset(TRecordset& recset, const char* nome) const;
bool accoda_recordset(TRecordset& recset, const char* nome) const; bool accoda_recordset(TRecordset& recset, const char* nome) const;
const TString& curr_cod_list(const long codcf) const;
public: public:
}; };
@ -227,6 +229,36 @@ void TFile2Txt::fill_anagrafica_cliente(const TISAM_recordset& archivio_clienti,
clienti.set_fatt("CodiceFiscale", archivio_clienti.get(CLI_COFI), is_fatt); clienti.set_fatt("CodiceFiscale", archivio_clienti.get(CLI_COFI), is_fatt);
} }
const TString& TFile2Txt::curr_cod_list(const long codcf) const
{
TString16 key; key.format("C|%ld", codcf);
TString4 codlist = cache().get(LF_CFVEN, key, CFV_CODLIST);
bool done = codlist.blank();
while (!done)
{
done = true;
key.format("L||||%s", (const char*)codlist);
const TRectype& rec = cache().get(LF_CONDV, key);
const TString4 nxtlist = rec.get(CONDV_CODLISSUCC);
if (nxtlist.full())
{
TDate datascad = rec.get(CONDV_VALFIN);
if (datascad.ok())
{
while (datascad.wday() >= 6)
--datascad;
if (datascad <= TDate(TODAY))
{
codlist = nxtlist;
done = false;
}
}
}
}
return get_tmp_string() = codlist;
}
//clienti: i commenti del metodo sono nella genera_cliente_txt() della ha1100 (che è la mamma di questo) //clienti: i commenti del metodo sono nella genera_cliente_txt() della ha1100 (che è la mamma di questo)
bool TFile2Txt::genera_clienti_txt(const long da_codcli) bool TFile2Txt::genera_clienti_txt(const long da_codcli)
{ {
@ -280,30 +312,11 @@ bool TFile2Txt::genera_clienti_txt(const long da_codcli)
} }
TString4 codpag = archivio_clienti.get(CLI_CODPAG).as_string(); const TString4 codpag = archivio_clienti.get(CLI_CODPAG).as_string();
clienti.set("CodicePagamento", codpag.right(2)); clienti.set("CodicePagamento", codpag.right(2));
//prima moda: nel campo CodiceListino ci va il codice Campo del Contratto del cliente (listino cliente per Hardy) //Nel campo CodiceListino ci va il codice del Listino Campo associato al cliente in cfven
/*TString query; clienti.set("CodiceListino", curr_cod_list(codcf));
query << "USE CONDV";
query << "\nFROM TIPO=C TIPOCF=C CODCF=#CODCF";
query << "\nTO TIPO=C TIPOCF=C CODCF=#CODCF";
TISAM_recordset contratti(query);
contratti.set_var("#CODCF", archivio_clienti.get(CLI_CODCF).as_int());
if (contratti.move_last())
{
const TString& cod_contr = contratti.get(CONDV_COD).as_string();
clienti.set("CodiceListino", cod_contr);
}*/
//seconda moda: nel campo CodiceListino ci va il codice del Listino Campo associato al cliente in cfven
TToken_string key_cfven;
key_cfven.add("C");
key_cfven.add(codcf);
const TRectype& rec_cfven = cache().get(LF_CFVEN, key_cfven);
const TString& listino_cliente = rec_cfven.get(CFV_CODLIST);
clienti.set("CodiceListino", listino_cliente);
const TString& str_sconto = archivio_clienti.get(CFV_SCONTO).as_string(); const TString& str_sconto = archivio_clienti.get(CFV_SCONTO).as_string();
clienti.set("ScontoFineFattura", hd_find_sconto(str_sconto)); clienti.set("ScontoFineFattura", hd_find_sconto(str_sconto));
@ -430,6 +443,7 @@ bool TFile2Txt::genera_sospesi_txt(const long da_codcli)
//listini: i commenti del metodo sono nella genera_listino_txt() della ha1100 //listini: i commenti del metodo sono nella genera_listino_txt() della ha1100
bool TFile2Txt::genera_righelistini_txt() bool TFile2Txt::genera_righelistini_txt()
{ {
const TDate oggi(TODAY);
TEsporta_listini_recordset righe_listini; TEsporta_listini_recordset righe_listini;
TISAM_recordset agenti("USE AGENTI"); TISAM_recordset agenti("USE AGENTI");
@ -437,6 +451,7 @@ bool TFile2Txt::genera_righelistini_txt()
TString query; TString query;
query << "USE RCONDV"; query << "USE RCONDV";
query << "\nJOIN CONDV INTO TIPO=TIPO TIPOCF=TIPOCF CODCF==CODCF COD==COD";
query << "\nFROM TIPO=L"; query << "\nFROM TIPO=L";
query << "\nTO TIPO=L"; query << "\nTO TIPO=L";
@ -449,13 +464,18 @@ bool TFile2Txt::genera_righelistini_txt()
TProgind progind(archivio_rcondv_items, "Listini...", false, true); TProgind progind(archivio_rcondv_items, "Listini...", false, true);
for (bool ok = archivio_rcondv.move_first(); ok; ok = archivio_rcondv.move_next()) for (bool ok = archivio_rcondv.move_first(); ok; ok = archivio_rcondv.move_next())
{ {
progind.addstatus(1); if (!progind.addstatus(1))
break;
const TDate datascad = archivio_rcondv.get("CONDV.VALFIN").as_date();
if (datascad.ok() && datascad < oggi)
continue;
righe_listini.new_rec(""); righe_listini.new_rec("");
righe_listini.set("CodiceTerminale", codage); righe_listini.set("CodiceTerminale", codage);
righe_listini.set(RCONDV_COD, archivio_rcondv.get(RCONDV_COD)); righe_listini.set(RCONDV_COD, archivio_rcondv.get(RCONDV_COD));
TString80 codart = archivio_rcondv.get(RCONDV_CODRIGA).as_string(); const TString80 codart = archivio_rcondv.get(RCONDV_CODRIGA).as_string();
righe_listini.set(RCONDV_CODRIGA, codart); righe_listini.set(RCONDV_CODRIGA, codart);
real prezzo = archivio_rcondv.get(RCONDV_PREZZO).as_real(); real prezzo = archivio_rcondv.get(RCONDV_PREZZO).as_real();

View File

@ -1,10 +1,6 @@
#include <xvt.h> #include <xvt.h>
#include <checks.h>
#include "ha2.h" #include "ha2.h"
#define usage "Error - usage : %s -{0|1}"
int main(int argc,char** argv) int main(int argc,char** argv)
{ {
int rt = -1 ; int rt = -1 ;
@ -12,14 +8,8 @@ int main(int argc,char** argv)
switch (r) switch (r)
{ {
case 0: case 1: rt = ha2200(argc, argv) ; break; //gestione file fatture
rt = ha2100(argc, argv) ; break; //gestione file privat default: rt = ha2100(argc, argv) ; break; //gestione file privat
break;
case 1:
rt = ha2200(argc, argv) ; break; //gestione file fatture
break;
default:
error_box(usage, argv[0]) ; break;
} }
return rt; return rt;
} }

View File

@ -1907,8 +1907,7 @@ int TSystemisamfile::update(
{ {
if (newrec.len() == 0) if (newrec.len() == 0)
{ {
if (interactive) // if (interactive) error_box(FR("Il nuovo tracciato per il file %d e' vuoto"), num()); // Fastidioso per Ilaria
error_box(FR("Il nuovo tracciato per il file %d e' vuoto"), num());
setstatus(_istrcerr); setstatus(_istrcerr);
return status(); return status();
} }

View File

@ -346,7 +346,8 @@ TPrintwin::TPrintwin(TTextfile& txt, const char* title)
_pagelen = p.formlen(); _pagelen = p.formlen();
if (!ispdf) p.init_formlen(prwin); // Calcola offset e altre misure pagina //if (ispdf) // 28/05/2012 Guy: Non capisco perchè ci fosse quesata condizione che falsava p.get_dots_per_line()
p.init_formlen(prwin); // Calcola offset e altre misure pagina
int abs_column=p.get_column_offset(); int abs_column=p.get_column_offset();
int segno = abs_column>=0 ? 1 : -1; int segno = abs_column>=0 ? 1 : -1;

View File

@ -37,10 +37,10 @@ bool TGenera_documenti_msk::on_field_event(TOperable_field& o, TField_event e, l
switch (o.dlg()) switch (o.dlg())
{ {
case F_DTDOC: case F_DTDOC:
if(e == fe_modify) if (e == fe_modify)
{ {
const TDate oggi(TODAY); const TDate oggi(TODAY);
if(get_date(F_DTDOC) <= oggi) if (get_date(F_DTDOC) <= oggi)
{ {
warning_box(TR("Attenzione: la data documento non può essere nel passato")); warning_box(TR("Attenzione: la data documento non può essere nel passato"));
o.reset(); o.reset();
@ -394,11 +394,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
const TRectype& rcont = cont.row(codart); const TRectype& rcont = cont.row(codart);
//recupero i dati di interesse dalla riga del contratto //recupero i dati di interesse dalla riga del contratto
bool arrot; const bool arrot = rcont.get_int(LVRCONDV_CALCCONS) == 1;
if (rcont.get_int(LVRCONDV_CALCCONS) == 1)
arrot = true;
else
arrot = false;
const real conguaglio = rcont.get_real(LVRCONDV_QTACONG); const real conguaglio = rcont.get_real(LVRCONDV_QTACONG);
real& qta = *(real*)_quantita.objptr(chiave); real& qta = *(real*)_quantita.objptr(chiave);
@ -480,8 +476,8 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
//scrivo il magazzino //scrivo il magazzino
TCausale_magazzino rit(caudt.causale_ritiro()); const TCausale_magazzino rit(caudt.causale_ritiro());
TCausale_magazzino con(caudt.causale_consegna()); const TCausale_magazzino con(caudt.causale_consegna());
TString8 magazzino; TString8 magazzino;
TString8 magazzinoc; TString8 magazzinoc;
@ -521,7 +517,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
const TString4 codcau = cau.caucol().empty() ? cau.codice() : cau.caucol(); const TString4 codcau = cau.caucol().empty() ? cau.codice() : cau.caucol();
rdoc.put(RDOC_CODAGG1, codcau); rdoc.put(RDOC_CODAGG1, codcau);
if(cau.is_consegna()) if (cau.is_consegna())
{ {
const real quantita_noarr = qta - conguaglio; const real quantita_noarr = qta - conguaglio;
real quantita_arr = quantita_noarr > ZERO ? quantita_noarr : ZERO; real quantita_arr = quantita_noarr > ZERO ? quantita_noarr : ZERO;
@ -532,6 +528,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
long arr = quantita_arr.integer() % ppconf.integer(); long arr = quantita_arr.integer() % ppconf.integer();
//se sforo (arr > 0) allora calcolo quanti pezzi in più gli devo dare e aggiorno la quantità //se sforo (arr > 0) allora calcolo quanti pezzi in più gli devo dare e aggiorno la quantità
if (arr > 0) if (arr > 0)
{
if (arr > ppconf.integer() * perarr / 100) //arr <= ppconf*perarr/100 -> formula calcolo congualgio di Tassan if (arr > ppconf.integer() * perarr / 100) //arr <= ppconf*perarr/100 -> formula calcolo congualgio di Tassan
{ {
arr = ppconf.integer() - arr; arr = ppconf.integer() - arr;
@ -539,6 +536,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
} }
else else
quantita_arr -= arr; quantita_arr -= arr;
}
} }
//scrivo le quantità //scrivo le quantità
@ -551,7 +549,9 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
//aggiorno il conguaglio sulla riga del contratto //aggiorno il conguaglio sulla riga del contratto
//altrimenti se il record di riga contratto è vuoto aggiorno il log //altrimenti se il record di riga contratto è vuoto aggiorno il log
if (!rcont.empty()) if (!rcont.empty())
{
aggiorna_conguaglio((TRectype&)rcont, quantita_arr - quantita_noarr); aggiorna_conguaglio((TRectype&)rcont, quantita_arr - quantita_noarr);
}
else else
{ {
TString str; TString str;
@ -890,7 +890,7 @@ void TGenera_documenti_app::aggiorna_conguaglio(TRectype& rcondv, const real arr
rcondv.rewrite(rcont); rcondv.rewrite(rcont);
} }
//////////////////////////////// ////////////////////////////////
//// Metodi Pubblic //// //// Metodi Pubblic ////
//////////////////////////////// ////////////////////////////////

View File

@ -767,13 +767,11 @@ bool TGestione_bolle_msk::lv_codart_handler(TMask_field& f, KEY k)
//estraggo il record corrispondente su LF_CLIFOGIAC //estraggo il record corrispondente su LF_CLIFOGIAC
const TRecmag_lavanderie& reclav = artrec.find_rec(last_esc); const TRecmag_lavanderie& reclav = artrec.find_rec(last_esc);
real dotod = reclav.get_real(CLIFOGIAC_DOTOD); const real dotod = reclav.get_real(CLIFOGIAC_DOTOD);
real dotmp = reclav.get_real(CLIFOGIAC_DOTTM); const real dotmp = reclav.get_real(CLIFOGIAC_DOTTM);
rdoc.put("DOTOD", dotod); rdoc.put("DOTOD", dotod);
TString16 tmp; msk.set(FR_JOLLY1, dotod);
tmp << dotod;
msk.field(FR_JOLLY1).set(tmp);
} }
if (rdoc.get(RDOC_CODAGG1).empty()) if (rdoc.get(RDOC_CODAGG1).empty())
@ -1332,22 +1330,28 @@ void TGestione_bolle_app::salva_conguaglio(const TDocumento_mask& mask)
const TLaundry_contract cont(codcf, indsped, datadoc); const TLaundry_contract cont(codcf, indsped, datadoc);
const int codcont = cont.get_int(LVCONDV_CODCONT); const int codcont = cont.get_int(LVCONDV_CODCONT);
const bool is_buono_ritiro = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") &&
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
TLocalisamfile rcondv(LF_LVRCONDV); TLocalisamfile rcondv(LF_LVRCONDV);
FOR_EACH_DOC_ROW_BACK(d, r, row) FOR_EACH_DOC_ROW_BACK(d, r, row)
{ {
TRiga_documento& rdoc = (TRiga_documento&)*row; TRiga_documento& rdoc = (TRiga_documento&)*row;
const TCausale_lavanderie cau(rdoc.get(RDOC_CODAGG1)); if (!is_buono_ritiro) // 02-05-2012
if (cau.movcong())
{ {
rcondv.put(LVRCONDV_CODCF, codcf); const TCausale_lavanderie cau(rdoc.get(RDOC_CODAGG1));
rcondv.put(LVRCONDV_CODCONT, codcont); if (cau.movcong())
rcondv.put(LVRCONDV_CODART, rdoc.get(RDOC_CODART));
if (rcondv.read() == NOERR)
{ {
rcondv.put(LVRCONDV_QTACONG, rdoc.get_real(RDOC_QTAGG5)); rcondv.put(LVRCONDV_CODCF, codcf);
rcondv.rewrite(); rcondv.put(LVRCONDV_CODCONT, codcont);
rcondv.put(LVRCONDV_CODART, rdoc.get(RDOC_CODART));
if (rcondv.read() == NOERR)
{
rcondv.put(LVRCONDV_QTACONG, rdoc.get_real(RDOC_QTAGG5));
rcondv.rewrite();
}
} }
} }
@ -1517,14 +1521,11 @@ void TGestione_bolle_app::init_modify_mode(TMask &m)
//metodo che mi restituisce la giac //metodo che mi restituisce la giac
TGiac_per_cli& TGestione_bolle_app::giacenza() TGiac_per_cli& TGestione_bolle_app::giacenza()
{ { return _giac; }
return _giac;
}
int lv3100( int argc, char* argv[]) int lv3100( int argc, char* argv[])
{ {
TGestione_bolle_app a; TGestione_bolle_app a;
a.run( argc, argv, TR("Documenti di Trasporto")); a.run( argc, argv, TR("Documenti di Trasporto"));
return 0; return 0;
} }

View File

@ -349,7 +349,7 @@ void TEvasione_ter_msk::genera_buono()
const long codcab = clifo.get_long(CLI_CODCAB);const TString80 iban = clifo.get(CLI_IBAN); const long codcab = clifo.get_long(CLI_CODCAB);const TString80 iban = clifo.get(CLI_IBAN);
//reupero la cuasale di magazzino di testata //reupero la cuasale di magazzino di testata
const TString16 causmag = cache().get("%TIP", tipodoc, "S9"); const TString8 causmag = cache().get("%TIP", tipodoc, "S9");
//recupero i dati di interesse dal file CFVEN //recupero i dati di interesse dal file CFVEN
const TRectype& cfven = cache().get(LF_CFVEN, key); const TRectype& cfven = cache().get(LF_CFVEN, key);
@ -425,7 +425,7 @@ void TEvasione_ter_msk::genera_buono()
doc.put(DOC_TIPODOC, tipodoc); doc.put(DOC_TIPODOC, tipodoc);
doc.put(DOC_STATO, stato); doc.put(DOC_STATO, stato);
if(ini_get_bool(CONFIG_DITTA, "lv", "DataBcon")) if(ini_get_bool(CONFIG_DITTA, "lv", "DataBcon"))
{ {
doc.put(DOC_DATADOC, datagen); doc.put(DOC_DATADOC, datagen);
doc.put(DOC_DATAPART, databolla); doc.put(DOC_DATAPART, databolla);
@ -525,11 +525,8 @@ void TEvasione_ter_msk::genera_buono()
dotod += (rbpre.qta_consegnata() - rbpre.qta_ritirata()); dotod += (rbpre.qta_consegnata() - rbpre.qta_ritirata());
rdoc.put("DOTOD", dotod); rdoc.put("DOTOD", dotod);
bool dtmp = false; const bool dtmp = datagen >= rcont.get_date(LVRCONDV_INDTTMP) && datagen <= rcont.get_date(LVRCONDV_FIDTTMP);
if (datagen >= rcont.get_date(LVRCONDV_INDTTMP) && datagen <= rcont.get_date(LVRCONDV_FIDTTMP)) if (dtmp)
dtmp = true;
if(dtmp)
{ {
rdoc.put("DOTMP", dottmp); rdoc.put("DOTMP", dottmp);
rdoc.add("DOTMP", rbpre.qta_consegnata() - rbpre.qta_ritirata()); rdoc.add("DOTMP", rbpre.qta_consegnata() - rbpre.qta_ritirata());
@ -559,21 +556,29 @@ void TEvasione_ter_msk::genera_buono()
TCausale_magazzino rit(cau.causale_ritiro()); TCausale_magazzino rit(cau.causale_ritiro());
TCausale_magazzino con(cau.causale_consegna()); TCausale_magazzino con(cau.causale_consegna());
TString8 magazzino; TString8 magazzino, magazzinoc;
TString8 magazzinoc; if (rit.get("S10").full())
if(rit.get("S10").full())
magazzino = rit.get("S10").mid(0,5); magazzino = rit.get("S10").mid(0,5);
else else
magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGN"); magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGN");
if(con.get("S10").full()) if (con.get("S10").full())
magazzinoc = con.get("S10").mid(0,5); magazzinoc = con.get("S10").mid(0,5);
else else
magazzinoc << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGC"); magazzinoc << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGC");
rdoc.put(RDOC_CODMAG, magazzino); rdoc.put(RDOC_CODMAG, magazzino);
rdoc.put(RDOC_CODMAGC, magazzinoc); rdoc.put(RDOC_CODMAGC, magazzinoc);
// Aggiorna conguaglio 28/05/2012
const real diff = rbpre.qta_consegnata() - rbpre.qta_dacons();
if (!diff.is_zero() && ini_get_bool(CONFIG_DITTA, "lv", "Aggcong"))
{
TLocalisamfile lvrcondv(LF_LVRCONDV);
TRectype& rcondv = (TRectype&)rcont;
rcondv.add(LVRCONDV_QTACONG, diff);
rcondv.rewrite(lvrcondv);
}
} }
//salva la bolla solo se ha almeno una riga //salva la bolla solo se ha almeno una riga
@ -603,7 +608,7 @@ void TEvasione_ter_msk::genera_buono()
rbpre.set_rifbcon(rifbcon); rbpre.set_rifbcon(rifbcon);
} }
if(controlla()) if (controlla())
{ {
const TString4 stato = cache().get("%TIP", ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_PRE", NULL, 0), "S2").mid(2,1); const TString4 stato = cache().get("%TIP", ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_PRE", NULL, 0), "S2").mid(2,1);
bpre.put(DOC_STATO, stato); bpre.put(DOC_STATO, stato);
@ -742,7 +747,7 @@ void TEvasione_ter_msk::registra()
} }
} }
for(int i = 1; i <= doc.rows(); i++) for (int i = 1; i <= doc.rows(); i++)
{ {
TRiga_documento& row = doc[i]; TRiga_documento& row = doc[i];
TBuono_prelievo_row rdoc(row); TBuono_prelievo_row rdoc(row);
@ -832,7 +837,6 @@ void TEvasione_ter_msk::riempi_sheet()
int TEvasione_ter_msk::arrotonda(const int quantita) int TEvasione_ter_msk::arrotonda(const int quantita)
{ {
int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
int qta = quantita; int qta = quantita;
const TString& codart = get(FR_CODART); const TString& codart = get(FR_CODART);
@ -860,6 +864,8 @@ int TEvasione_ter_msk::arrotonda(const int quantita)
//recupero i dati di interesse dalla riga del contratto //recupero i dati di interesse dalla riga del contratto
if (rcont.get_int(LVRCONDV_CALCCONS) == 1) if (rcont.get_int(LVRCONDV_CALCCONS) == 1)
{ {
const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
//calcolo di quanti pezzi sforo //calcolo di quanti pezzi sforo
long arr = quantita % ppconf; long arr = quantita % ppconf;
@ -887,7 +893,7 @@ void TEvasione_ter_msk::spezza_riga()
TToken_string chiave(key); TToken_string chiave(key);
TQuantita_riga& qr = *(TQuantita_riga*)itm; TQuantita_riga& qr = *(TQuantita_riga*)itm;
if((TDate)chiave.get() == oggi && !qr.get_evaso()) if(TDate(chiave.get()) == oggi && !qr.get_evaso())
{ {
real qtarit = qr.get_qta_rit(); real qtarit = qr.get_qta_rit();
real qtadacon = qr.get_qta_da_con(); real qtadacon = qr.get_qta_da_con();
@ -944,7 +950,7 @@ void TEvasione_ter_msk::evadi_da_terminale()
if (rp.empty()) if (rp.empty())
{ {
warning_box(TR("Il pacco non esiste a magazzino")); warning_box(TR("Il pacco %s non esiste a magazzino"), (const char*)codpacco);
warning_box(TR("Non è stato possibile sommare il pacco a nessuna riga del buono")); warning_box(TR("Non è stato possibile sommare il pacco a nessuna riga del buono"));
} }
else else
@ -954,15 +960,14 @@ void TEvasione_ter_msk::evadi_da_terminale()
TToken_string riga = rp.rigabolla(); TToken_string riga = rp.rigabolla();
int numdoc = riga.get_int(3); int numdoc = riga.get_int(3);
if(numdoc > 0) if (numdoc > 0)
{ {
TString msg; TString msg;
msg << "Il pacco risulta già associato al buono numero " << numdoc; msg << "Il pacco risulta già associato al buono numero " << numdoc;
warning_box(msg); warning_box(msg);
return; return;
} } else
if (numdoc < 0)
if(numdoc < 0)
{ {
TString msg; TString msg;
msg << "Il pacco non risulta disponibile a magazzino"; msg << "Il pacco non risulta disponibile a magazzino";

View File

@ -7,10 +7,8 @@ int main(int argc,char** argv)
const int n = (argc > 1) ? atoi(argv[1]+1) : 0; const int n = (argc > 1) ? atoi(argv[1]+1) : 0;
switch(n) switch(n)
{ {
case 1: case 1 : collega_vers_rit(argc,argv); break;
collega_vers_rit(argc,argv); break; default: SchedaPerc(argc,argv); break;
default:
SchedaPerc(argc,argv); break;
} }
return n < 0; return n < 0;

View File

@ -730,8 +730,8 @@ void TSchedaPercipienti::init_insert_mode(TMask& m)
void TSchedaPercipienti::on_config_change() void TSchedaPercipienti::on_config_change()
{ {
TConfig conf(CONFIG_STUDIO); TConfig conf(CONFIG_STUDIO, "77");
_anno_dic = (int)conf.get_long(ANNO_SEL, NULL); _anno_dic = conf.get_int(ANNO_SEL);
} }
void TSchedaPercipienti::init_query_mode(TMask& m) void TSchedaPercipienti::init_query_mode(TMask& m)
@ -743,7 +743,7 @@ void TSchedaPercipienti::init_query_mode(TMask& m)
{ {
const bool variazione = coll_variazione(); const bool variazione = coll_variazione();
_flag_cg = TRUE; _flag_cg = TRUE;
TString16 tipo(""); TString4 tipo;
tipo << _coll._tipo; tipo << _coll._tipo;
m.set(F_TIPOA, tipo); m.set(F_TIPOA, tipo);
if (_coll._codanagr != 0L) if (_coll._codanagr != 0L)
@ -795,8 +795,8 @@ void TSchedaPercipienti::init_query_mode(TMask& m)
_from_modify = FALSE; _from_modify = FALSE;
// forza il ricalcolo dell'ultimo numero disponibile // forza il ricalcolo dell'ultimo numero disponibile
TString16 dummy(m.get(F_NPROG)); const TString& dummy = m.get(F_NPROG);
if (dummy.not_empty()) if (dummy.full())
setta_nprog(m); setta_nprog(m);
} }

View File

@ -63,16 +63,15 @@ NUMBER F_CODANAGRPERC 5
BEGIN BEGIN
PROMPT 15 8 "" PROMPT 15 8 ""
USE LF_PERC USE LF_PERC
JOIN LF_ANAG TO LF_PERC INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN LF_ANAG INTO TIPOA=TIPOA CODANAGR=CODANAGR
INPUT CODDITTA F_CODDITTA SELECT INPUT CODDITTA F_CODDITTA SELECT
INPUT TIPOA F_TIPOA SELECT INPUT TIPOA F_TIPOA SELECT
INPUT CODANAGR F_CODANAGRPERC INPUT CODANAGR F_CODANAGRPERC
DISPLAY "Tipo " TIPOA DISPLAY "Tipo " TIPOA
DISPLAY "Codice " CODANAGR DISPLAY "Codice " CODANAGR
DISPLAY "Cognome - Nome o Ragione sociale@50" LF_ANAG->RAGSOC DISPLAY "Denominazione@50" LF_ANAG->RAGSOC
OUTPUT F_TIPOA TIPOA
OUTPUT F_CODANAGRPERC CODANAGR OUTPUT F_CODANAGRPERC CODANAGR
OUTPUT F_RAGSOCPER LF_ANAG->RAGSOC OUTPUT F_RAGSOCPER LF_ANAG->RAGSOC
MESSAGE COPY, F_CODANAGR MESSAGE COPY, F_CODANAGR
ADD RUN 775 -0 ADD RUN 775 -0
GROUP 2 GROUP 2
@ -81,15 +80,15 @@ END
NUMBER F_CODANAGRCOM 5 NUMBER F_CODANAGRCOM 5
BEGIN BEGIN
PROMPT 15 8 "" PROMPT 15 8 ""
USE LF_ANAG SELECT (TIPOA=#F_TIPOA) USE LF_ANAG
INPUT TIPOA F_TIPOA INPUT TIPOA F_TIPOA SELECT
INPUT CODANAGR F_CODANAGRCOM INPUT CODANAGR F_CODANAGRCOM
DISPLAY "Tipo " TIPOA DISPLAY "Tipo" TIPOA
DISPLAY "Codice " CODANAGR DISPLAY "Codice" CODANAGR
DISPLAY "Cognome - Nome o Ragione sociale@50" RAGSOC DISPLAY "Denominazione@50" RAGSOC
OUTPUT F_TIPOA TIPOA OUTPUT F_TIPOA TIPOA
OUTPUT F_CODANAGRCOM CODANAGR OUTPUT F_CODANAGRCOM CODANAGR
OUTPUT F_RAGSOCCOM RAGSOC OUTPUT F_RAGSOCCOM RAGSOC
MESSAGE COPY, F_CODANAGR MESSAGE COPY, F_CODANAGR
ADD RUN BA4 -1 ADD RUN BA4 -1
FLAGS "H" FLAGS "H"
@ -100,14 +99,14 @@ STRING F_RAGSOCCOM 50
BEGIN BEGIN
PROMPT 25 8 "" PROMPT 25 8 ""
USE LF_ANAG KEY 2 USE LF_ANAG KEY 2
INPUT TIPOA F_TIPOA JOIN LF_PERC INTO CODDITTA=#F_CODDITTA TIPOA=TIPOA CODANAGR==CODANAGR
INPUT TIPOA F_TIPOA SELECT
INPUT RAGSOC F_RAGSOCCOM INPUT RAGSOC F_RAGSOCCOM
DISPLAY "Cognome - Nome o Ragione sociale@50" RAGSOC DISPLAY "Denominazione@50" RAGSOC
DISPLAY "Tipo" TIPOA DISPLAY "Tipo" TIPOA
DISPLAY "Codice" CODANAGR DISPLAY "Codice" CODANAGR
OUTPUT F_RAGSOCCOM RAGSOC DISPLAY "Percipiente" LF_PERC->CODANAGR
OUTPUT F_CODANAGRCOM CODANAGR COPY OUTPUT F_CODANAGRCOM
OUTPUT F_TIPOA TIPOA
ADD RUN BA4 -1 ADD RUN BA4 -1
MESSAGE COPY, F_RAGSOCPER MESSAGE COPY, F_RAGSOCPER
GROUP 1 GROUP 1
@ -116,15 +115,12 @@ END
STRING F_RAGSOCPER 50 STRING F_RAGSOCPER 50
BEGIN BEGIN
PROMPT 25 8 "" PROMPT 25 8 ""
USE LF_ANAG KEY 2 USE LF_ANAG KEY 2 SELECT LF_PERC->CODANAGR!=""
INPUT TIPOA F_TIPOA JOIN LF_PERC INTO CODDITTA=#F_CODDITTA TIPOA=TIPOA CODANAGR==CODANAGR
INPUT TIPOA F_TIPOA SELECT
INPUT RAGSOC F_RAGSOCPER INPUT RAGSOC F_RAGSOCPER
DISPLAY "Cognome - Nome o Ragione sociale@50" RAGSOC COPY DISPLAY F_RAGSOCCOM
DISPLAY "Tipo" TIPOA COPY OUTPUT F_CODANAGRPERC
DISPLAY "Codice" CODANAGR
OUTPUT F_RAGSOCPER RAGSOC
OUTPUT F_CODANAGRPERC CODANAGR
OUTPUT F_TIPOA TIPOA
ADD RUN BA4 -1 ADD RUN BA4 -1
GROUP 2 GROUP 2
END END

View File

@ -686,7 +686,7 @@ TTracciato770::TTracciato770(char tipo) : _tipo(tipo)
if (tipo == 'A') if (tipo == 'A')
{ {
add_filler(2, 14); // 2 add_filler(2, 14); // 2
add_field("Codice fornitura", NU, 16, 5); // 3 add_field("Codice fornitura", AN, 16, 5); // 3
add_field("Tipo fornitore", NU, 21, 2); // 4 add_field("Tipo fornitore", NU, 21, 2); // 4
add_field("Codice fiscale del fornitore", CF, 23, 16); add_field("Codice fiscale del fornitore", CF, 23, 16);
add_filler(39, 483); add_filler(39, 483);
@ -1368,45 +1368,6 @@ bool TTrasferimento770::append_record_b()
rec.set(100, 0); // situazioni particolari: vale sempre 0 rec.set(100, 0); // situazioni particolari: vale sempre 0
/*rec.set(110, cod_fis_dic());
rec.set(111, 1); //codice carica del rappresentante (vale tra 1 e 15 ma non 10; messo a 1 per ipotesi)
rec.set(115, _ragsoc_dic.left(30)); //cognome rappresentante
rec.set(116, _ragsoc_dic.mid(30)); //nome rappresentante
rec.set(117, "M"); //sesso del rappresentante
rec.set(, rec_comres.get(COM_DENCOM));
rec.set(, rec_comres.get(COM_PROVCOM));
rec.set(, rec_anagr.get(ANA_COMRES));
rec.set(, rec_anagr.get(ANA_CAPRES));
TString80 indirizzo = rec_anagr.get(ANA_INDRES);
indirizzo.strip_double_spaces(); indirizzo.trim();
TString8 tipologia;
const int spazio = indirizzo.find(' ');
if (spazio > 0 && spazio < 16) // Lunghezza accettabile per TString16 successiva
{
TString16 t = indirizzo.left(spazio);
t.trim(); t.upper();
if (t == "C.LE" || t == "CALLE") tipologia = "CALLE"; else
if (t == "C.SO" || t == "CORSO") tipologia = "CORSO"; else
if (t == "L.GO" || t == "LARGO") tipologia = "LARGO"; else
if (t == "P.CO" || t == "PARCO") tipologia = "PARCO"; else
if (t == "P.ZA" || t == "PIAZZA") tipologia = "PIAZZA"; else
if (t == "S.DA" || t == "STRADA") tipologia = "STRADA"; else
if (t == "V." || t == "VIA") tipologia = "VIA"; else
if (t == "V.LE" || t == "VIALE") tipologia = "VIALE"; else
if (t == "V.LO" || t == "VICOLO") tipologia = "VICOLO";
}
if (tipologia.full())
indirizzo = indirizzo.mid(spazio+1);
else
tipologia = "VIA";
indirizzo.cut(35);
rec.set(101, tipologia);
rec.set(102, indirizzo);
rec.set(103, rec_anagr.get(ANA_CIVRES));*/
const TRectype& rec_nditte = _cache770.get(LF_NDITTE, _cod_ditta); const TRectype& rec_nditte = _cache770.get(LF_NDITTE, _cod_ditta);
key.cut(0) << "F|" << rec_nditte.get(NDT_RAPPR); key.cut(0) << "F|" << rec_nditte.get(NDT_RAPPR);
@ -1533,7 +1494,7 @@ bool TTrasferimento770::split(const char* path)
if (_save_headers) if (_save_headers)
{ {
rec.tipo_record('A'); // Compila record di testata A rec.tipo_record('A'); // Compila record di testata A
rec.set(3, "77S11"); // Codice fornitura rec.set(3, "77S12"); // Codice fornitura
rec.set(4, 1); // Tipo fornitore 01 = Soggetto che invia la propria dichiarazione rec.set(4, 1); // Tipo fornitore 01 = Soggetto che invia la propria dichiarazione
rec.set(5, cod_fis_dic()); // Codice fiscale del fornitore rec.set(5, cod_fis_dic()); // Codice fiscale del fornitore
if (volumes > 1) if (volumes > 1)

View File

@ -188,8 +188,11 @@ bool TGestione_provv_app::datascad_handler(TMask_field& f, KEY key)
bool TGestione_provv_app::enable_handler(TMask_field& f, KEY key) bool TGestione_provv_app::enable_handler(TMask_field& f, KEY key)
{ {
if (key == K_SPACE) if (key == K_SPACE)
f.mask().enable(-5); {
return TRUE; TMask& m = f.mask();
m.enable(-5, !m.field(F_PROVVPAG).active());
}
return true;
} }
bool TGestione_provv_app::imprata_handler(TMask_field& f, KEY key) bool TGestione_provv_app::imprata_handler(TMask_field& f, KEY key)

View File

@ -346,6 +346,7 @@ END
BUTTON DLG_ENABLE 10 2 BUTTON DLG_ENABLE 10 2
BEGIN BEGIN
PROMPT -44 -1 "~Abilita" PROMPT -44 -1 "~Abilita"
PICTURE TOOL_EDIT
END END
ENDPAGE ENDPAGE

View File

@ -41,7 +41,7 @@
10229=print.ico 10229=print.ico
10230=convoc.ico 10230=convoc.ico
10231=setup.ico 10231=setup.ico
10232=moka.ico 10232=hardy.ico
10233=day_work.ico 10233=day_work.ico
10234=day_holy.ico 10234=day_holy.ico
10235=day_full.ico 10235=day_full.ico

View File

@ -125,7 +125,8 @@ OEM=7
Owner=Salvatore Durante Owner=Salvatore Durante
OEM=8 OEM=8
[802] [802]
Owner=CONNEXXA s.r.l. pc0001 -*=31-12-3000
Owner=Salvatore Durante
OEM=8 OEM=8
[803] [803]
Owner=Meta Calabria (ex-prassi calabria) Owner=Meta Calabria (ex-prassi calabria)
@ -476,6 +477,7 @@ OEM=1
Owner=CONFINDUSTRIA Piacenza Owner=CONFINDUSTRIA Piacenza
OEM=1 OEM=1
[6298] [6298]
*=15-04-2012
Owner=Cosea scrl Owner=Cosea scrl
OEM=1 OEM=1
[6299] [6299]
@ -509,6 +511,7 @@ OEM=1
Owner=MEDIA PADANIA SRL Owner=MEDIA PADANIA SRL
OEM=1 OEM=1
[6342] [6342]
*=15-05-2012
Owner=ACTUAL SPOTTI SRL Owner=ACTUAL SPOTTI SRL
OEM=1 OEM=1
[6349] [6349]
@ -694,9 +697,12 @@ OEM=0
Owner=IMM.RE MONTE GRAPPA PRIMA SRL Owner=IMM.RE MONTE GRAPPA PRIMA SRL
OEM=1 OEM=1
[7040] [7040]
*=08-02-2011 *=08-02-2012
Owner=Folloni gianluca Owner=Folloni gianluca
OEM=0 OEM=0
[7055]
Owner=Laboratorio Casella
OEM=7
[7061] [7061]
ps0872 -?=31-12-3000 ps0872 -?=31-12-3000
Owner=Realplast Owner=Realplast
@ -827,13 +833,14 @@ OEM=1
Owner=SO.F.IND S.R.L. Owner=SO.F.IND S.R.L.
OEM=1 OEM=1
[7187] [7187]
Owner=BOLZI BRUNO Owner=BRUNO BOLZI SRL
OEM=6 OEM=6
[7188] [7188]
Owner=CISLAGHI ARREDAMENTI S.R.L. Owner=CISLAGHI ARREDAMENTI S.R.L.
OEM=1 OEM=1
[7191] [7191]
Owner=Garlassi Owner=GARLASSI FRATELLI & C. s.n.c.
OEM=6
[7196] [7196]
Owner=Milano AD SRL Owner=Milano AD SRL
OEM=1 OEM=1
@ -859,11 +866,13 @@ Owner=Soc.Coop.OP Monte (Prassi Calabria)
OEM=8 OEM=8
[7225] [7225]
Owner=LA NUOVA COPERTURA SRL Owner=LA NUOVA COPERTURA SRL
OEM=1
[7232] [7232]
Owner=Impresa Giardino Srl Owner=Impresa Giardino Srl
OEM=7 OEM=7
[7241] [7241]
Owner=Minigomme Owner=Minigomme
OEM=1
MustCall=22-09-2011 MustCall=22-09-2011
[7242] [7242]
Owner=TOP PARTIES GEST. SERVIZI SRL Owner=TOP PARTIES GEST. SERVIZI SRL
@ -937,7 +946,7 @@ OEM=1
Owner=IMMOBILIARE GIARDINO SAS Owner=IMMOBILIARE GIARDINO SAS
OEM=1 OEM=1
[7319] [7319]
Owner=IST.SUORE DELLA SACRA FAMIGLIA Owner=ENTE DI FORMAZIONE SACRA FAMIGLIA
OEM=1 OEM=1
[7320] [7320]
Owner=CENTRO PER LA CULTURA Owner=CENTRO PER LA CULTURA
@ -2146,6 +2155,9 @@ OEM=1
Owner=Serpelloni SEC Owner=Serpelloni SEC
OEM=0 OEM=0
MustCall=31-12-2011 MustCall=31-12-2011
[8546]
Owner=Extra
OEM=7
[8550] [8550]
Owner=Carla srl Owner=Carla srl
OEM=7 OEM=7
@ -3071,7 +3083,7 @@ OEM=8
Owner=O.P. MONTE SOC. COOP. A R.L. Owner=O.P. MONTE SOC. COOP. A R.L.
OEM=8 OEM=8
[8908] [8908]
Owner=Levilsud di Marinaro Owner=L'EDILSUD DI MARINARO A. & C. s.a.s.
OEM=8 OEM=8
[8909] [8909]
Owner=Abramo Holding spa Owner=Abramo Holding spa
@ -3122,7 +3134,7 @@ OEM=1
Owner=ROSSINO SRL Owner=ROSSINO SRL
OEM=1 OEM=1
[8926] [8926]
Owner=Idealfiocchi Owner=IDEALFIOCCHI SNC DI ORLANDELLI DAVIDE & C.
OEM=1 OEM=1
[8928] [8928]
Owner=CO.MA.RI SOCIETA' COOPERATIVA Owner=CO.MA.RI SOCIETA' COOPERATIVA
@ -3139,20 +3151,20 @@ OEM=1
Owner=CO.MA.RI SOCIETA' COOPERATIVA Owner=CO.MA.RI SOCIETA' COOPERATIVA
OEM=1 OEM=1
[8936] [8936]
Owner=EMME&E Owner=EMME & E srl
OEM=1 OEM=1
[8937] [8937]
Owner=EMME&E Owner=EMME & E srl
OEM=1 OEM=1
[8938] [8938]
Owner=Produs Owner=PRODUS DI GIUSEPPE STILO E C. SNC
OEM=1 OEM=1
[8939] [8939]
Owner=SCAI Owner=S.C.A.I. SRL
OEM=1 OEM=1
[8940] [8940]
Owner=Interactive (Tetractis) Owner=IMPREMED S.p.A.
OEM=1 OEM=4
[8941] [8941]
Owner=HABILITA S.P.A Owner=HABILITA S.P.A
OEM=1 OEM=1
@ -3232,12 +3244,27 @@ OEM=8
[8972] [8972]
Owner=Abramo Real Estate Owner=Abramo Real Estate
OEM=8 OEM=8
[8973]
Owner=Impremed
OEM=4
[8974]
Owner=Barranca Antonio
OEM=8
[8975]
Owner=Petrolo Santina
OEM=8
[8989] [8989]
Owner=Guimatrag Owner=Guimatrag
OEM=0 OEM=0
[8990] [8990]
Owner=BUSTAPLAST FLEXIBLE PACKAGING SRL Owner=BUSTAPLAST FLEXIBLE PACKAGING SRL
OEM=1 OEM=1
[8991]
Owner=Verga
OEM=1
[8992]
Owner=Eurobica
OEM=1
[8993] [8993]
Owner=CATTANEO CARNI & CO.MA.RI. Owner=CATTANEO CARNI & CO.MA.RI.
OEM=1 OEM=1
@ -3247,18 +3274,48 @@ OEM=0
[8995] [8995]
Owner=Associazione Industriali Piacenza Owner=Associazione Industriali Piacenza
OEM=1 OEM=1
[8997]
Owner=Folloni Gianluca
OEM=1
[8998] [8998]
Owner=BIESSE SOCIETA' COOPERATIVA Owner=BIESSE SOCIETA' COOPERATIVA
OEM=1 OEM=1
[8999] [8999]
Owner=CO.GE.F. SRL SOC.UNIPERSONALE Owner=CO.GE.F. SRL SOC.UNIPERSONALE
OEM=1 OEM=1
[9000]
Owner=SICIM S.p.A.
OEM=1
[9001]
Owner=SICIM S.p.A.
OEM=1
[9002]
Owner=SICIM S.p.A.
OEM=1
[9003]
Owner=SICIM S.p.A.
OEM=1
[9004]
Owner=Consorzio GET GROUP
OEM=1
[9005] [9005]
Owner=Scuola Materna di Prato di Correggio Owner=Scuola Materna di Prato di Correggio
OEM=1 OEM=1
[9006]
Owner=Actual Spotti S.R.L.
OEM=1
[9007]
Owner=CO.SE.A.
OEM=1
[9008]
Owner=New Life
OEM=1
[9020] [9020]
Owner=G.G. Trasporti s.r.l. Owner=G.G. Trasporti s.r.l.
OEM=1 OEM=1
[9022]
Owner=SICIM SUCCURSAL DE ESPANA
OEM=1
[9023] [9023]
Owner=Barbarini Owner=Barbarini
OEM=1 OEM=1
@ -3266,7 +3323,7 @@ OEM=1
Owner=F.C.F. New Construction Nautica srl Owner=F.C.F. New Construction Nautica srl
OEM=1 OEM=1
[9025] [9025]
Owner=Barbarini Owner=BARBARINI & C. SRL
OEM=1 OEM=1
[9999] [9999]
pd0300 -0=31-12-3000 pd0300 -0=31-12-3000

View File

@ -682,11 +682,11 @@ void CampoWizardPage4::OnSSAPick(wxCommandEvent& e)
const int nSerial = wxAtoi(strSerial); const int nSerial = wxAtoi(strSerial);
if (nSerial > 1000 && nSerial < 10000) if (nSerial > 1000 && nSerial < 10000)
{ {
wxString path("./SSAGetInfo.exe -nome "); wxString path("./SSAGetInfo.exe -nome c:/");
path << strSerial; path << strSerial;
wxExecute(path, wxEXEC_SYNC); wxExecute(path, wxEXEC_SYNC);
strSerial += wxT(".ssax"); strSerial += wxT(".ssax");
if (wxFileName::FileExists(strSerial)) if (wxFileName::FileExists(path))
{ {
wxString msg = _T("Spedire il file ") + strSerial + _(" a abilitazioni_software@sirio-is.it\nper ottenere il file della licenza da copiare nella cartella di installazione."); wxString msg = _T("Spedire il file ") + strSerial + _(" a abilitazioni_software@sirio-is.it\nper ottenere il file della licenza da copiare nella cartella di installazione.");
MessageBox(msg); MessageBox(msg);
@ -855,7 +855,7 @@ int CampoWizardPage4::DongleTest()
if (serno == 0xFFFF) if (serno == 0xFFFF)
{ {
wxString strSSA = wxFindFirstFile("*.ssax"); wxString strSSA = wxFindFirstFile("c:\\*.ssax");
if (!strSSA.IsEmpty()) if (!strSSA.IsEmpty())
{ {
strSSA = strSSA.After('\\'); strSSA = strSSA.After('\\');

View File

@ -377,7 +377,6 @@ int TMotore_application::read( TMask& m )
mask.reset_father_rows(); mask.reset_father_rows();
doc() = (TDocumento &)_rel->curr(); doc() = (TDocumento &)_rel->curr();
mask.update_father_rows(false); mask.update_father_rows(false);

View File

@ -1511,7 +1511,7 @@ void TMask_generator::genera( const TString& profilo )
_m->control( T_BOTTONE, DLG_PREVIEW, 202 ); _m->control( T_BOTTONE, DLG_PREVIEW, 202 );
_m->begin( ); _m->begin( );
_m->prompt( 5, 1, "Anteprima" ); _m->prompt( 5, 1, "Antepr." );
_m->picture(TOOL_PREVIEW); _m->picture(TOOL_PREVIEW);
_m->end( ); _m->end( );
@ -1548,7 +1548,7 @@ void TMask_generator::genera( const TString& profilo )
_m->control( T_BOTTONE, DLG_PREVREC, 202 ); _m->control( T_BOTTONE, DLG_PREVREC, 202 );
_m->begin( ); _m->begin( );
_m->prompt( 9, 1, "Indietro"); _m->prompt( 9, 1, "Prec.");
_m->message( "EXIT,305" ); _m->message( "EXIT,305" );
_m->picture(TOOL_PREVREC); _m->picture(TOOL_PREVREC);
_m->end( ); _m->end( );
@ -1562,7 +1562,7 @@ void TMask_generator::genera( const TString& profilo )
_m->control( T_BOTTONE, DLG_NEXTREC, 202 ); _m->control( T_BOTTONE, DLG_NEXTREC, 202 );
_m->begin( ); _m->begin( );
_m->prompt( 11, 1, "Avanti"); _m->prompt( 11, 1, "Succ.");
_m->message( "EXIT,306" ); _m->message( "EXIT,306" );
_m->picture(TOOL_NEXTREC); _m->picture(TOOL_NEXTREC);
_m->end( ); _m->end( );

View File

@ -4,7 +4,7 @@
#include <applicat.h> #include <applicat.h>
#include <automask.h> #include <automask.h>
#include <defmask.h> #include <defmask.h>
#include <modaut.h> #include <dongle.h>
#include <postman.h> #include <postman.h>
#include <progind.h> #include <progind.h>
#include <reprint.h> #include <reprint.h>
@ -969,7 +969,7 @@ class TReport_doc_app : public TSkeleton_application
TReport_doc_mask* _msk; TReport_doc_mask* _msk;
int _anno; int _anno;
TString16 _codnum; // codice numerazione / profilo TString16 _codnum, _tipodoc; // codice numerazione / profilo
long _ndoc, _codcf; long _ndoc, _codcf;
char _tipocf; char _tipocf;
bool _no_print_dlg; bool _no_print_dlg;
@ -984,9 +984,9 @@ protected:
void print_trans(const char* ininame); void print_trans(const char* ininame);
TOutput_mode key2mode(KEY k) const; TOutput_mode key2mode(KEY k) const;
void set_next_pdf(int an, const char* cn, long nd, char tcf, long cf); void set_next_pdf(const TRecordset* doc);
virtual bool get_next_pdf(int anno, long ditta, const char* codnum, long numdoc, long codcf, TFilename& pdf) const; virtual bool get_next_pdf(int anno, long ditta, const char* codnum, long numdoc, long codcf, TFilename& pdf) const;
const TString& get_mail_address() const; bool get_mail_address(TToken_string& to, TToken_string& cc) const;
virtual bool get_next_mail(TToken_string& to, TToken_string& cc, TToken_string& ccn, virtual bool get_next_mail(TToken_string& to, TToken_string& cc, TToken_string& ccn,
TString& subj, TString& text, TToken_string& attach, short& ui) const ; TString& subj, TString& text, TToken_string& attach, short& ui) const ;
void print_extra_copies(TReport_doc& report, const TRecordset& doc, TReport_book& book, word printed_copies) const; void print_extra_copies(TReport_doc& report, const TRecordset& doc, TReport_book& book, word printed_copies) const;
@ -998,13 +998,24 @@ public:
virtual bool destroy(); virtual bool destroy();
}; };
void TReport_doc_app::set_next_pdf(int an, const char* cn, long nd, char tcf, long cf) void TReport_doc_app::set_next_pdf(const TRecordset* doc)
{ {
_anno = an; if (doc)
_codnum = cn; {
_ndoc = nd; _anno = doc->get(DOC_ANNO).as_int();
_tipocf = tcf; _codnum = doc->get(DOC_CODNUM).as_string();
_codcf = cf; _ndoc = doc->get(DOC_NDOC).as_int();
_tipodoc= doc->get(DOC_TIPODOC).as_string();
_tipocf = doc->get(DOC_TIPOCF).as_string()[0];
_codcf = doc->get(DOC_CODCF).as_int();
}
else
{
_anno = 0;
_codnum = _tipodoc = "";
_ndoc = _codcf = 0L;
_tipocf = ' ';
}
} }
bool TReport_doc_app::get_next_pdf(int anno, long ditta, const char* codnum, long ndoc, long codcf, TFilename& pdf) const bool TReport_doc_app::get_next_pdf(int anno, long ditta, const char* codnum, long ndoc, long codcf, TFilename& pdf) const
@ -1015,11 +1026,49 @@ bool TReport_doc_app::get_next_pdf(int anno, long ditta, const char* codnum, lon
return ok; return ok;
} }
const TString& TReport_doc_app::get_mail_address() const bool TReport_doc_app::get_mail_address(TToken_string& to, TToken_string& cc) const
{ {
TString8 key; key << _tipocf << '|' << _codcf; if (_tipodoc.full())
const TString& maddr = cache().get(LF_CLIFO, key, CLI_DOCMAIL); {
return maddr; const TTipo_documento& tipo = cached_tipodoc(_tipodoc);
TFilename report; tipo.mail_print_profile(report);
report = report.name_only();
TString8 clifo; clifo.format("%c%06ld", _tipocf, _codcf);
TISAM_recordset contacts("USE MULTIREL\nFROM COD=BACON FIRST=#CLIFO\nTO COD=BACON FIRST=#CLIFO");
contacts.set_var("#CLIFO", clifo);
TToken_string data;
for (bool ok = contacts.move_first(); ok; ok = contacts.move_next())
{
data = contacts.get("DATA").as_string();
FOR_EACH_TOKEN(data, tok)
{
if (_tipodoc.match(tok, true) || report.match(tok, true))
{
const TRectype& rub = cache().get(LF_CONTACT, contacts.get("SECOND").as_int());
TString80 mail = rub.get("MAIL");
if (mail.blank())
mail = rub.get("MAIL2");
if (mail.full())
{
if (to.blank())
to = mail;
else
cc.add(mail);
break;
}
}
}
}
}
if (to.blank())
{
TString8 key; key << _tipocf << '|' << _codcf;
to = cache().get(LF_CLIFO, key, CLI_DOCMAIL);
}
return to.full();
} }
bool TReport_doc_app::get_next_mail(TToken_string& to, TToken_string& cc, TToken_string& ccn, bool TReport_doc_app::get_next_mail(TToken_string& to, TToken_string& cc, TToken_string& ccn,
@ -1029,8 +1078,7 @@ bool TReport_doc_app::get_next_mail(TToken_string& to, TToken_string& cc, TToken
if (_ndoc > 0L) if (_ndoc > 0L)
{ {
to = get_mail_address(); ok = get_mail_address(to, cc);
ok = to.full();
if (ok) if (ok)
{ {
TDocumento doc('D', _anno, _codnum, _ndoc); TDocumento doc('D', _anno, _codnum, _ndoc);
@ -1104,7 +1152,7 @@ void TReport_doc_app::add_filter(TString& query, bool from) const
bool TReport_doc_app::create() bool TReport_doc_app::create()
{ {
if (!has_module(RSAUT)) if (!has_module(RSAUT))
return error_box(TR("Modulo non autorizzato")); return error_box(FR("Modulo non autorizzato: %s"), dongle().module_code2desc(RSAUT));
_msk = new TReport_doc_mask; _msk = new TReport_doc_mask;
return TSkeleton_application::create(); return TSkeleton_application::create();
@ -1184,7 +1232,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
"Rispondendo NO verranno solo salvati gli allegati.")); "Rispondendo NO verranno solo salvati gli allegati."));
} }
const bool mail_requested = (mode == out_mail || mode == out_signed_mail); const bool mail_requested = (mode == out_mail || mode == out_signed_mail);
for (short loop = mail_requested ? 0 : 1; loop < 2; loop++) for (short loop = mail_requested ? 0 : 1; loop < 2; loop++)
{ {
@ -1211,12 +1259,10 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
const TCodice_numerazione& cn = cached_numerazione(codnum); const TCodice_numerazione& cn = cached_numerazione(codnum);
arc = cn.auto_archive(); arc = cn.auto_archive();
} }
set_next_pdf(doc.get(DOC_ANNO).as_int(), doc.get(DOC_CODNUM).as_string(), set_next_pdf(&doc);
doc.get(DOC_NDOC).as_int(), doc.get(DOC_TIPOCF).as_string()[0],
doc.get(DOC_CODCF).as_int());
// const bool send_mail = ( mode == out_mail || mode == out_signed_mail) && get_mail_address().full(); TToken_string to, cc;
const bool send_mail = mail_requested && get_mail_address().full(); const bool send_mail = mail_requested && get_mail_address(to, cc);
const bool paperless = send_mail || mode == out_pdf || mode == out_signed_pdf; const bool paperless = send_mail || mode == out_pdf || mode == out_signed_pdf;
// Tenta di costruirsi il nome del report: se non stampo su carta cerco di usare un profilo con sfondo // Tenta di costruirsi il nome del report: se non stampo su carta cerco di usare un profilo con sfondo
@ -1247,8 +1293,9 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
mail_book->archive(NULL, signature); mail_book->archive(NULL, signature);
TString mesg; TString mesg;
TToken_string to, cc; get_mail_address(to, cc);
mesg << tipo.descrizione() << TR(" n. ") << doc.get(DOC_NDOC) mesg << tipo.descrizione() << TR(" n. ") << doc.get(DOC_NDOC)
<< TR(" del ") << doc.get(DOC_DATADOC) << TR(" a ") << get_mail_address(); << TR(" del ") << doc.get(DOC_DATADOC) << TR(" a ") << to;
mail_log.log(0, mesg); mail_log.log(0, mesg);
} }
} }
@ -1333,7 +1380,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
if (book.pages() > 0) if (book.pages() > 0)
{ {
if (docs > 1) if (docs > 1)
set_next_pdf(0, "", 0L, ' ', 0L); //spegne l'archiviazione nell'esportazione;non si possono archiviare più docs in uno!!! set_next_pdf(NULL); //spegne l'archiviazione nell'esportazione;non si possono archiviare più docs in uno!!!
if (mail_log.recordset()->items() > 0) if (mail_log.recordset()->items() > 0)
book.add(mail_log); book.add(mail_log);
@ -1344,7 +1391,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
case out_signed_pdf: case out_signed_pdf:
{ {
TFilename pdf; pdf.tempdir(); TFilename pdf; pdf.tempdir();
pdf << SLASH << _anno <<'_' << _codnum << '_' << _ndoc; pdf << SLASH << _anno << '_' << _codnum << '_' << _ndoc;
pdf.ext("pdf"); pdf.ext("pdf");
if (book.export_pdf(pdf, mode == out_signed_pdf)) if (book.export_pdf(pdf, mode == out_signed_pdf))
xvt_sys_goto_url(pdf, "open"); xvt_sys_goto_url(pdf, "open");

View File

@ -87,8 +87,7 @@ protected: // TApplication
void set_options(); void set_options();
void generate(); void generate();
public: public:
TGenerazioneEffetti_app() {_msk = NULL; _num_sheet = NULL;} TGenerazioneEffetti_app() : _msk(NULL), _num_sheet(NULL) {}
virtual ~TGenerazioneEffetti_app() { }
}; };
inline TGenerazioneEffetti_app& app() { return (TGenerazioneEffetti_app&) main_app(); } inline TGenerazioneEffetti_app& app() { return (TGenerazioneEffetti_app&) main_app(); }
@ -307,7 +306,7 @@ bool TGenerazioneEffetti_app::doc_tipo_stato_ok(TDocumento* doc)
{ {
const int items = _tipi_doc.items(); const int items = _tipi_doc.items();
bool found = FALSE; bool found = FALSE;
const TString16 tipo(doc->tipo().codice()); const TString4 tipo(doc->tipo().codice());
const char stato = doc->stato(); const char stato = doc->stato();
for (int i=0;i<items && !found;i++) for (int i=0;i<items && !found;i++)
{ {
@ -323,8 +322,13 @@ bool TGenerazioneEffetti_app::doc_tipo_stato_ok(TDocumento* doc)
int TGenerazioneEffetti_app::change_doc_status(TDocumento* doc) int TGenerazioneEffetti_app::change_doc_status(TDocumento* doc)
// Cambia lo stato del documento // Cambia lo stato del documento
{ {
doc->stato(_final_doc_status); int err = 0;
return doc->rewrite(); if (doc->stato() != _final_doc_status)
{
doc->stato(_final_doc_status);
err = doc->rewrite();
}
return err;
} }
@ -459,10 +463,11 @@ void TGenerazioneEffetti_app::generate()
set_options(); set_options();
const bool sort_by_date = _msk->get_int(F_ORDERBY) == 0; const bool sort_by_date = _msk->get_int(F_ORDERBY) == 0;
const bool fast_status = _msk->get_bool(F_SPEEDSTATUS);
for (long i=0L; i<items;i++) // Scorre per tutte le numerazioni dello sheet for (long i=0L; i<items;i++) // Scorre per tutte le numerazioni dello sheet
{ {
const TString8 codnum = _num_sheet->row(i).get(1); const TString4 codnum = _num_sheet->row(i).get(1);
// Controlla se la numerazione corrente e' stata selezionata // Controlla se la numerazione corrente e' stata selezionata
bool is_selected = _num_sheet->row_enabled(i); bool is_selected = _num_sheet->row_enabled(i);
@ -506,14 +511,15 @@ void TGenerazioneEffetti_app::generate()
} }
TCursor doc_cur(&doc_rel, filt_expr, cursor_key, &da, &a); TCursor doc_cur(&doc_rel, filt_expr, cursor_key, &da, &a);
TString msg;
const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
if (cur_items == 0) if (cur_items == 0)
{ {
warning_box("Non vi sono effetti da generare per il codice numerazione %s",(const char*)codnum); msg << TR("Non vi sono effetti da generare per il codice numerazione ") << codnum;
xvt_dm_popup_warning(msg);
continue; continue;
} }
TString msg;
msg << "Selezione documenti " << codnum; msg << "Selezione documenti " << codnum;
if (sort_by_date) if (sort_by_date)
{ {
@ -535,14 +541,17 @@ void TGenerazioneEffetti_app::generate()
// altrimenti compone una lista dei documenti da raggruppare // altrimenti compone una lista dei documenti da raggruppare
// - alla fine del ciclo per numerazioni scorre la lista residua e genera gli // - alla fine del ciclo per numerazioni scorre la lista residua e genera gli
// effetti rimasti // effetti rimasti
for (;j<cur_items;j++) for (; j<cur_items; j++)
{ {
p.setstatus(j+1); if (!p.setstatus(j+1))
break;
doc_cur = j; doc_cur = j;
TDocumento* doc = new TDocumento; if (doc_cur.curr().get(DOC_CODNUM) != codnum)
if (doc->read(doc_cur.curr()) == NOERR && // legge il documento continue;
codnum == doc->get(DOC_CODNUM) && // patch del cazzo
doc_tipo_stato_ok(doc)) // controlla che il tipo documento e lo stato siano coerenti con la ELD selezionata TDocumento* doc = new TDocumento(doc_cur.curr());
if (doc_tipo_stato_ok(doc)) // controlla che il tipo documento e lo stato siano coerenti con la ELD selezionata
{ {
TPagamento & pag = doc->pagamento(); TPagamento & pag = doc->pagamento();
if (pag.code().not_empty()) if (pag.code().not_empty())
@ -554,6 +563,7 @@ void TGenerazioneEffetti_app::generate()
TLista_documenti lista_in,lista_out; TLista_documenti lista_in,lista_out;
lista_in.add(doc); lista_in.add(doc);
doc = NULL; // Non cancellarlo in quanto messo nella lista
if (!gen_eff.elabora(lista_in,lista_out,data)) // La data non serve, cosi' come la lista documenti in uscita if (!gen_eff.elabora(lista_in,lista_out,data)) // La data non serve, cosi' come la lista documenti in uscita
gen_eff.set_writeable(FALSE); gen_eff.set_writeable(FALSE);
@ -562,7 +572,7 @@ void TGenerazioneEffetti_app::generate()
else else
{ {
add_to_group_list(doc); // Aggiorna la lista degli effetti da raggruppare add_to_group_list(doc); // Aggiorna la lista degli effetti da raggruppare
delete doc; doc = NULL; // Non cancellarlo in quanto messo nella lista
} }
} }
else else
@ -570,16 +580,15 @@ void TGenerazioneEffetti_app::generate()
int err = change_doc_status(doc); // Cambia lo stato al documento int err = change_doc_status(doc); // Cambia lo stato al documento
if (err != NOERR) if (err != NOERR)
warning_box("Errore %d tentando di cambiare lo stato del documento %s/%d",err,(const char*)doc->numerazione(),doc->numero()); warning_box("Errore %d tentando di cambiare lo stato del documento %s/%d",err,(const char*)doc->numerazione(),doc->numero());
delete doc;
} }
} }
else if (doc)
delete doc; delete doc;
} }
} }
// Ogni elemento di _group_array è una TToken_string. Ogni elemento della TToken_string contiene // Ogni elemento di _group_array è una TToken_string. Ogni elemento della TToken_string contiene
// la chiave per identificare il documento che fa parte di quel raggruppamento // la chiave per identificare il documento che fa parte di quel raggruppamento
tot += gen_eff.group_bills(_group_array, false);// Setta l'elenco dei documenti per generare effetti raggruppati tot += gen_eff.group_bills(_group_array, false, fast_status);// Setta l'elenco dei documenti per generare effetti raggruppati
if (tot > 0L) if (tot > 0L)
message_box("Totale effetti generati: %ld", tot); message_box("Totale effetti generati: %ld", tot);

View File

@ -6,6 +6,7 @@
#define F_DATA_FIN 104 #define F_DATA_FIN 104
#define F_RAGGRUPPA 105 #define F_RAGGRUPPA 105
#define F_ORDERBY 106 #define F_ORDERBY 106
#define F_SPEEDSTATUS 107
#define F_ANNO 201 #define F_ANNO 201
#define F_CODNUM 202 #define F_CODNUM 202

View File

@ -8,7 +8,7 @@ BEGIN
PICTURE TOOL_MULTISEL PICTURE TOOL_MULTISEL
END END
#include <stdbar.h> #include <elabar.h>
ENDPAGE ENDPAGE
@ -78,7 +78,7 @@ BEGIN
FLAGS "A" FLAGS "A"
END END
STRING F_CODNUM 3 STRING F_CODNUM 4
BEGIN BEGIN
PROMPT 14 6 "Numerazione " PROMPT 14 6 "Numerazione "
FLAGS "BU" FLAGS "BU"
@ -131,8 +131,17 @@ END
BOOLEAN F_RAGGRUPPA BOOLEAN F_RAGGRUPPA
BEGIN BEGIN
PROMPT 1 10 "Raggruppamento effetti" PROMPT 1 10 "Raggruppamento effetti"
MESSAGE FALSE DISABLE,F_SPEEDSTATUS
MESSAGE TRUE ENABLE,F_SPEEDSTATUS
END END
BOOLEAN F_SPEEDSTATUS
BEGIN
PROMPT 1 11 "Cambio stato documenti veloce"
FLAGS "H"
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -234,8 +234,8 @@ END
SPREADSHEET F_DEFAULTS SPREADSHEET F_DEFAULTS
BEGIN BEGIN
PROMPT 1 5 "" PROMPT 1 5 ""
ITEM "Campo@40" ITEM "Campo@50"
ITEM "Valore@40" ITEM "Valore@50"
END END
ENDPAGE ENDPAGE

View File

@ -554,7 +554,7 @@ public:
bool is_risorsa() const { return tipo().tipo() == RIGA_RISORSE;} bool is_risorsa() const { return tipo().tipo() == RIGA_RISORSE;}
bool is_attrezzatura() const { return tipo().tipo() == RIGA_ATTREZZATURE;} bool is_attrezzatura() const { return tipo().tipo() == RIGA_ATTREZZATURE;}
bool is_sconto() const {return tipo().tipo() == RIGA_SCONTI;} bool is_sconto() const {return tipo().tipo() == RIGA_SCONTI;}
bool is_sconto_perc() const { return is_sconto() && get(RDOC_SCONTO).not_empty();} bool is_sconto_perc() const { return is_sconto() && get(RDOC_SCONTO).full();}
bool is_omaggio() const { return tipo().tipo() == RIGA_OMAGGI;} bool is_omaggio() const { return tipo().tipo() == RIGA_OMAGGI;}
bool is_descrizione() const { return tipo().tipo() == RIGA_DESCRIZIONI;} bool is_descrizione() const { return tipo().tipo() == RIGA_DESCRIZIONI;}
bool is_articolo() const; bool is_articolo() const;
@ -564,13 +564,12 @@ public:
bool is_evasa() const; // Ritorna vero se la riga è evasa bool is_evasa() const; // Ritorna vero se la riga è evasa
void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); } void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); }
void unchecked() { checked(FALSE); } void unchecked() { checked(FALSE); }
bool linked() const { return get(RDOC_DACODNUM).not_empty();} bool linked() const { return get(RDOC_DACODNUM).full(); }
// @cmember Assegna il documento corrente // @cmember Assegna il documento corrente
void set_doc(TDocumento * doc) { _doc = doc; } void set_doc(TDocumento * doc) { _doc = doc; }
virtual const TDocumento & doc() const { CHECK(_doc, "Documento nullo"); return *_doc;} virtual const TDocumento & doc() const { CHECK(_doc, "Documento nullo"); return *_doc;}
virtual bool edit(int logicnum = 0, const char * alternate_key_fields = NULL, const char* hint = NULL) const; virtual bool edit(int logicnum = 0, const char * alternate_key_fields = NULL, const char* hint = NULL) const;
virtual void zero(const char * fieldname); virtual void zero(const char * fieldname);
virtual void zero(char c = '\0'); virtual void zero(char c = '\0');
@ -1033,7 +1032,7 @@ public:
static TAssoc_array & auto_reopen_nums() { return _auto_reopen_nums;} static TAssoc_array & auto_reopen_nums() { return _auto_reopen_nums;}
static TAssoc_array & tipidoc_rels() { return _tipidoc_rels;} static TAssoc_array & tipidoc_rels() { return _tipidoc_rels;}
const TAssoc_array & father_rows() const { return _father_rows;} const TAssoc_array & father_rows() const { return _father_rows;}
void reset_father_rows() {_father_rows.destroy();} void reset_father_rows() { _father_rows.destroy(); }
void update_father_rows(bool add = true); void update_father_rows(bool add = true);
void save_father_rows(); void save_father_rows();

View File

@ -1442,11 +1442,15 @@ const TRectype* TRiga_documento::find_original_rdoc() const
key.add(get(RDOC_DAANNO)); key.add(get(RDOC_DAANNO));
key.add(get(RDOC_DAPROVV)); key.add(get(RDOC_DAPROVV));
key.add(get(RDOC_DANDOC)); key.add(get(RDOC_DANDOC));
for (int r = 1; ; r++) for (int r = 0; ; r++)
{ {
key.add(r, 4); if (r == 0)
key.add(id, 4);
else
key.add(r, 4);
const TRectype& rec = cache().get(LF_RIGHEDOC, key); const TRectype& rec = cache().get(LF_RIGHEDOC, key);
if (rec.empty()) break; if (r > 0 && rec.empty())
break;
if (rec.get_long(RDOC_IDRIGA) == id) if (rec.get_long(RDOC_IDRIGA) == id)
return &rec; return &rec;
} }

View File

@ -13,6 +13,11 @@
#include "../cg/cg2101.h" #include "../cg/cg2101.h"
#endif #endif
#ifndef __RECARRAY_H
#include <recarray.h>
#endif
class TLista_documenti : public TObject // velib04 class TLista_documenti : public TObject // velib04
{ {
@ -565,7 +570,7 @@ protected:
// Scrive i record array degli effetti raggruppati // Scrive i record array degli effetti raggruppati
error_type write_groups(bool interattivo); error_type write_groups(bool interattivo);
// Cambia lo stato dei gruppi di documenti raggruppati in effetti // Cambia lo stato dei gruppi di documenti raggruppati in effetti
error_type change_group_status(TDocumento&, TAssoc_array&); error_type change_group_status(TDocumento&, TAssoc_array&, bool bFast);
// Cambia lo stato del documento // Cambia lo stato del documento
error_type change_doc_status(TDocumento&); error_type change_doc_status(TDocumento&);
// Verifica se non ci sono stati errori // Verifica se non ci sono stati errori
@ -575,7 +580,7 @@ public:
const TDate& data_elab, bool interattivo = false); const TDate& data_elab, bool interattivo = false);
// Effettua il raggruppamento vero e proprio degli effetti (solo se ci sono elementi nell'assoc_array passato) // Effettua il raggruppamento vero e proprio degli effetti (solo se ci sono elementi nell'assoc_array passato)
long group_bills(TAssoc_array& group_array, bool interattivo); long group_bills(TAssoc_array& group_array, bool interattivo, bool fast);
long bills() const { return _total_bills; } long bills() const { return _total_bills; }
// void set_group(TAssoc_array& a) { _group_array = a; } // void set_group(TAssoc_array& a) { _group_array = a; }
void set_writeable(const bool b) { _can_write = b; } void set_writeable(const bool b) { _can_write = b; }

View File

@ -862,10 +862,8 @@ bool TContabilizzazione::load_parameters()
// il tutto. // il tutto.
if (_search_seq->empty_items()) if (_search_seq->empty_items())
{ return error_box(TR("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione."));
error_box("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione.");
return false;
}
_sc_enabled = conf.get_bool("GesSal","cg"); _sc_enabled = conf.get_bool("GesSal","cg");
_in_enabled = dongle().active(INAUT); _in_enabled = dongle().active(INAUT);
_nump_cfg = conf.get_bool("RifPro","cg"); _nump_cfg = conf.get_bool("RifPro","cg");
@ -1037,7 +1035,7 @@ long TContabilizzazione::doc_contabilized(const TDocumento& doc, bool anticipo)
TCausale* TContabilizzazione::get_caus(const TDocumento& doc, const int year) const TCausale* TContabilizzazione::get_caus(const TDocumento& doc, const int year) const
{ {
TString8 codcaus; TString4 codcaus;
TToken_string key; TToken_string key;
if (_fld_cms_cont.full()) if (_fld_cms_cont.full())
@ -1083,8 +1081,6 @@ TCausale* TContabilizzazione::get_caus(const TDocumento& doc, const int year) co
error_type TContabilizzazione::compile_head_mov(TDocumento& doc) error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Compila la testata // Compila la testata
{ {
TRectype& mov_rec = _movimento->curr();
const bool acquisto = doc.get_char(DOC_TIPOCF) == 'F'; const bool acquisto = doc.get_char(DOC_TIPOCF) == 'F';
// Reperisce la data documento // Reperisce la data documento
const TDate datadoc(doc.data()); const TDate datadoc(doc.data());
@ -1272,8 +1268,8 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
} }
// Dati del cliente... // Dati del cliente...
TString4 tipocf(doc.get(DOC_TIPOCF)); const TString4 tipocf(doc.get(DOC_TIPOCF));
long codcf = doc.get_long(DOC_CODCF); const long codcf = doc.get_long(DOC_CODCF);
TString80 occas; TString80 occas;
{ {
TLocalisamfile& cli_file = _clifo->lfile(); TLocalisamfile& cli_file = _clifo->lfile();
@ -1304,8 +1300,8 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Codice pagamento // Codice pagamento
const TString4 codpag(doc.get(DOC_CODPAG)); const TString4 codpag(doc.get(DOC_CODPAG));
if (sc_enabled(data_reg) || codpag.not_empty()) // La condizione di pagamento va controllata if (sc_enabled(data_reg) || codpag.full()) // La condizione di pagamento va controllata
{ // se e' abilitato il saldaconto o se e' stata inserita { // se e' abilitato il saldaconto o se e' stata inserita
_cpg->put("CODTAB",codpag); _cpg->put("CODTAB",codpag);
if (_cpg->read() != NOERR) if (_cpg->read() != NOERR)
{ {
@ -1313,7 +1309,9 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
return _error; return _error;
} }
} }
// Mo' riempie il record della incornata (testata) // Mo' riempie il record della incornata (testata)
TRectype& mov_rec = _movimento->curr();
mov_rec.zero(); mov_rec.zero();
mov_rec.put(MOV_ANNOES,cod_es); mov_rec.put(MOV_NUMREG,numreg); mov_rec.put(MOV_ANNOES,cod_es); mov_rec.put(MOV_NUMREG,numreg);
mov_rec.put(MOV_DATAREG,data_reg); mov_rec.put(MOV_DATACOMP,data_reg); mov_rec.put(MOV_DATAREG,data_reg); mov_rec.put(MOV_DATACOMP,data_reg);
@ -2666,29 +2664,67 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
// Scrive le scadenze. Liberamente tratto da cg2104.cpp. // Scrive le scadenze. Liberamente tratto da cg2104.cpp.
{ {
const TRectype& head = _movimento->curr(); const TRectype& head = _movimento->curr();
const long nreg = head.get_long(MOV_NUMREG); if (head.get_real(MOV_TOTDOC).is_zero())
// const real change(head.get_real(MOV_CAMBIO));
int anno = head.get_int(MOV_ANNOIVA);
if (head.get_real(MOV_TOTDOC) == ZERO)
return _error; return _error;
TString16 numpart; const bool is_nc = doc.is_nota_credito();
const long nreg = head.get_long(MOV_NUMREG);
int anno = head.get_int(MOV_ANNOIVA);
// const real change(head.get_real(MOV_CAMBIO));
TString8 numpart; // Max. 7 chars
if (_nump_cfg) if (_nump_cfg)
{
numpart = head.get(MOV_PROTIVA); numpart = head.get(MOV_PROTIVA);
if (is_nc)
{
int annorif = doc.get_int("ANNORIF");
if (annorif <= 0)
{
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
annorif = ddr.year();
if (annorif <= 0)
annorif = anno;
}
TString4 codnumrif = doc.get("CODNUMRIF");
if (codnumrif.blank())
codnumrif = doc.get(DOC_CODNUM);
const TString8 numdocrif = doc.get(DOC_NUMDOCRIF);
if (numdocrif.full())
{
TToken_string keydoc;
keydoc.add(doc.get(DOC_PROVV));
keydoc.add(annorif);
keydoc.add(codnumrif);
keydoc.add(numdocrif);
const long numreg = atol(cache().get(LF_DOC, keydoc, DOC_NUMREG));
if (numreg > 0)
{
TPartite_array pa; pa.add_numreg(numreg);
const TPartita* game = pa.first();
if (game != NULL)
{
anno = game->anno();
numpart = game->numero();
}
}
}
}
}
else else
{ {
numpart = doc.get(DOC_NUMDOCRIF); numpart = doc.get(DOC_NUMDOCRIF);
if (_caus->iva() == iva_vendite && !doc.tipo().nota_credito()) if (_caus->iva() == iva_vendite && !is_nc)
numpart.cut(0); numpart.cut(0);
if (numpart.blank()) if (numpart.blank())
numpart = head.get(MOV_NUMDOC); numpart = head.get(MOV_NUMDOC);
else else
{ {
TDate ddr = doc.get_date(DOC_DATADOCRIF); const TDate ddr = doc.get_date(DOC_DATADOCRIF);
if (ddr.ok()) if (ddr.ok())
anno = ddr.year(); anno = ddr.year();
} }
@ -2894,7 +2930,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
{ {
const TRiga_partite& fatt = newgame->riga(p); const TRiga_partite& fatt = newgame->riga(p);
const TDate datadoc = fatt.get_date(PART_DATADOC); const TDate datadoc = fatt.get_date(PART_DATADOC);
const TString16 numdoc = fatt.get(PART_NUMDOC); const TString8 numdoc = fatt.get(PART_NUMDOC);
if (datadoc.year() == datadocrif.year() && numdoc == numdocrif) if (datadoc.year() == datadocrif.year() && numdoc == numdocrif)
break; break;
} }

View File

@ -125,37 +125,66 @@ void TGenerazione_effetti::display_error(TDocumento& doc)
error_type TGenerazione_effetti::change_doc_status(TDocumento& doc) error_type TGenerazione_effetti::change_doc_status(TDocumento& doc)
// Cambia lo stato del documento // Cambia lo stato del documento
{ {
doc.stato(get("S4")[0]); const char stato_finale = get("S4")[0];
if (doc.rewrite() != NOERR) if (doc.stato() != stato_finale)
_error = chg_stat_error; {
doc.stato(stato_finale);
if (doc.rewrite() != NOERR)
_error = chg_stat_error;
}
return _error; return _error;
} }
error_type TGenerazione_effetti::change_group_status(TDocumento& doc, TAssoc_array& group_array) error_type TGenerazione_effetti::change_group_status(TDocumento& doc, TAssoc_array& group_array, bool fast)
// Cambia lo stato dei documenti raggruppati // Cambia lo stato dei documenti raggruppati
{ {
const int items = group_array.items(); const int items = group_array.items();
if (items > 0) if (items > 0)
{ {
TProgind pi(items, "Cambio stato documenti", false);
_error = no_error; _error = no_error;
TToken_string * group_element; TToken_string * group_element;
int i=0; int i=0;
TString msg;
const char stato_finale = get_char("S4");
// Ciclo sugli elementi dell'assoc_array // Ciclo sugli elementi dell'assoc_array
for (group_element = (TToken_string *) group_array.first_item(); group_element != NULL && i < items; i++,group_element = (TToken_string*)group_array.succ_item()) for (group_element = (TToken_string *) group_array.first_item(); group_element != NULL && i < items; i++,group_element = (TToken_string*)group_array.succ_item())
{ {
if (!pi.addstatus(1))
break;
group_element->restart(); group_element->restart();
const int doc_items = group_element->items(); const int doc_items = group_element->items();
for (int j=0;j<doc_items;j++) for (int j=0;j<doc_items;j++)
{ {
TToken_string t(group_element->get(j),'$'); TToken_string t(group_element->get(j),'$');
char provv = t.get_char(0); char provv = t.get_char(0);
int anno = t.get_int(1); const int anno = t.get_int(1);
TString codnum(t.get(2)); const TString4 codnum(t.get(2));
long numdoc = t.get_long(3); const long numdoc = t.get_long(3);
if (doc.read(provv,anno,codnum,numdoc) == NOERR) // Legge il documento
msg.cut(0) << TR("Cambio stato documento ") << codnum << ' ' << anno << '/' << numdoc;
pi.set_text(msg);
if (fast)
{ {
doc.put(DOC_STATO,get("S4")[0]); TFast_isamfile doc(LF_DOC);
doc.rewrite(); doc.put(DOC_PROVV, provv);
doc.put(DOC_ANNO, anno);
doc.put(DOC_CODNUM, codnum);
doc.put(DOC_NDOC, numdoc);
if (doc.read() == NOERR)
{
doc.put(DOC_STATO, stato_finale);
doc.rewrite();
}
}
else
{
if (doc.read(provv,anno,codnum,numdoc) == NOERR) // Legge il documento
change_doc_status(doc);
} }
} }
} }
@ -169,29 +198,39 @@ error_type TGenerazione_effetti::write_groups(bool interattivo)
int err = NOERR; int err = NOERR;
int i; int i;
TString msg;
TProgind pi(items, "Scrittura effetti", false);
_error = no_error; _error = no_error;
for (i = 0; i<items && err == NOERR; i++) // scorre gli effetti generati e li scrive su file for (i = 0; i<items && err == NOERR; i++) // scorre gli effetti generati e li scrive su file
{ {
if (!pi.addstatus(1))
break;
TEffetto& effetto = (TEffetto&)_effetti_array[i]; TEffetto& effetto = (TEffetto&)_effetti_array[i];
const real importo = effetto.get_real(EFF_IMPORTO); const real importo = effetto.get_real(EFF_IMPORTO);
if (importo > ZERO) // Gli effetti negativi non vanno scritti if (importo > ZERO) // Gli effetti negativi non vanno scritti
{ {
const char tipocf = effetto.get_char(EFF_TIPOCF); const char tipocf = effetto.get_char(EFF_TIPOCF);
const long codcf = effetto.get_long(EFF_CODCF); const long codcf = effetto.get_long(EFF_CODCF);
TString key;
key.format("%c|%ld", tipocf, codcf);
real impmin; real impmin;
if (!interattivo) if (!interattivo)
{ {
TString8 key; key.format("%c|%ld", tipocf, codcf);
impmin = real(cache().get(LF_CFVEN, key, CFV_IMPMINEFF)); impmin = real(cache().get(LF_CFVEN, key, CFV_IMPMINEFF));
if (impmin == ZERO) if (impmin.is_zero())
impmin = _impmin; impmin = _impmin;
} }
if (effetto.get_int(EFF_TIPOPAG) == _rid || importo >= impmin) if (effetto.get_int(EFF_TIPOPAG) == _rid || importo >= impmin)
{
err = effetto.write(*_efffile); // Pensa a tutto lui per rinumerare... err = effetto.write(*_efffile); // Pensa a tutto lui per rinumerare...
const long n = effetto.get_long(EFF_NPROGTR);
msg.cut(0) << TR("Scrittura effetto ") << n;
pi.set_text(msg);
}
else else
_effetti_array.destroy(i); _effetti_array.destroy(i);
} }
@ -254,7 +293,7 @@ error_type TGenerazione_effetti::write_groups(bool interattivo)
// per l'effetto 5 vale la fattura 3. // per l'effetto 5 vale la fattura 3.
// Questo e' quanto ho appreso (Hope I'm right...) ;-) // Questo e' quanto ho appreso (Hope I'm right...) ;-)
long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interattivo) long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interattivo, bool fast)
{ {
// Bail out if there aren't items... // Bail out if there aren't items...
const int items = group_array.items(); const int items = group_array.items();
@ -271,27 +310,24 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
msg1 = TR("Raggruppamento effetti"); msg1 = TR("Raggruppamento effetti");
#ifdef DBG #ifdef DBG
TProgind p(items,msg1,TRUE,TRUE,1); TProgind p(items,msg1,TRUE,TRUE);
#else #else
TProgind p(items,msg1,FALSE,TRUE,1); TProgind p(items,msg1,FALSE,TRUE);
#endif #endif
TToken_string * group_element; TToken_string * group_element;
// Ciclo sugli elementi dell'assoc_array // Ciclo sugli elementi dell'assoc_array
for (group_element = (TToken_string *) group_array.first_item(); group_element != NULL && i < items; i++,group_element = (TToken_string*)group_array.succ_item()) for (group_element = (TToken_string *) group_array.first_item(); group_element != NULL && i < items; i++,group_element = (TToken_string*)group_array.succ_item())
{ {
#ifdef DBG if (!p.setstatus(i+1))
if (p.iscancelled()) break; break;
#endif
p.setstatus(i+1);
// Ciclo sui documenti da raggruppare // Ciclo sui documenti da raggruppare
group_element->restart(); group_element->restart();
const int doc_items = group_element->items(); const int doc_items = group_element->items();
for (j=0;j<doc_items;j++) for (j=0;j<doc_items;j++)
{ {
#ifdef DBG if (p.iscancelled())
if (p.iscancelled()) break; break;
#endif
TToken_string t(group_element->get(j),'$'); TToken_string t(group_element->get(j),'$');
const char provv = t.get_char(0); const char provv = t.get_char(0);
const int anno = t.get_int(1); const int anno = t.get_int(1);
@ -358,8 +394,7 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
for (; index < effitems; index++) for (; index < effitems; index++)
{ {
TEffetto& effetto=(TEffetto&)_effetti_array[index]; const TEffetto& effetto = (const TEffetto&)_effetti_array[index];
if (datascad == effetto.get_date(EFF_DATASCAD)) if (datascad == effetto.get_date(EFF_DATASCAD))
break; break;
} }
@ -483,16 +518,16 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
} // Ciclo sui gruppi } // Ciclo sui gruppi
p.close_modal();
// Cambia lo stato a tutti i documenti raggruppati // Cambia lo stato a tutti i documenti raggruppati
long tot = 0L; long tot = 0L;
if (_can_write) if (_can_write)
{ {
xvtil_statbar_set("Scrittura effetti raggruppati in corso...");
do_events();
if (write_groups(interattivo) == no_error) if (write_groups(interattivo) == no_error)
{ {
tot = _effetti_array.items(); tot = _effetti_array.items();
change_group_status(doc, group_array); change_group_status(doc, group_array, fast);
} }
} }
_effetti_array.destroy(); _effetti_array.destroy();

View File

@ -1397,7 +1397,6 @@ void TDocumento_mask::doc2mask(bool reload_clifo, bool force_load, bool update)
if (r.tipo().tipo() == RIGA_PRESTAZIONI) if (r.tipo().tipo() == RIGA_PRESTAZIONI)
{ {
const TSpesa_prest & spesa = r.spesa(); const TSpesa_prest & spesa = r.spesa();
if (spesa.tipo() == 'V') if (spesa.tipo() == 'V')
s.disable_cell(i, s.cid2index(FR_QTA)); s.disable_cell(i, s.cid2index(FR_QTA));
} }
@ -3954,7 +3953,7 @@ void TDocumento_mask::update_father_rows(bool add)
if (r.is_merce() || r.is_omaggio()|| r.is_prestazione()) if (r.is_merce() || r.is_omaggio()|| r.is_prestazione())
{ {
TRiga_documento * original_row = (TRiga_documento *) r.find_original_rdoc(); const TRectype* original_row = r.find_original_rdoc();
if (original_row != NULL && _auto_reopen_nums.objptr(original_row->get(RDOC_CODNUM)) != NULL) if (original_row != NULL && _auto_reopen_nums.objptr(original_row->get(RDOC_CODNUM)) != NULL)
{ {
@ -3966,8 +3965,7 @@ void TDocumento_mask::update_father_rows(bool add)
key.add(original_row->get(RDOC_NDOC)); key.add(original_row->get(RDOC_NDOC));
key.add(original_row->get(RDOC_IDRIGA)); key.add(original_row->get(RDOC_IDRIGA));
real * qta = (real *) _father_rows.objptr(key); real* qta = (real*)_father_rows.objptr(key);
if (qta == NULL) if (qta == NULL)
{ {
qta = new real; qta = new real;
@ -3978,15 +3976,14 @@ void TDocumento_mask::update_father_rows(bool add)
if (r.is_articolo()) if (r.is_articolo())
{ {
TArticolo & art = cached_article(r.get(RDOC_CODARTMAG)); TArticolo& art = cached_article(r.get(RDOC_CODARTMAG));
value = art.convert_to_um(value, original_row->get(RDOC_UMQTA), r.get(RDOC_UMQTA)); value = art.convert_to_um(value, original_row->get(RDOC_UMQTA), r.get(RDOC_UMQTA));
} }
if(add) if(add)
*qta += value; *qta += value;
else else
*qta -= value; *qta -= value;
if (*qta == ZERO) if (qta->is_zero())
_father_rows.remove(key); _father_rows.remove(key);
} }
} }

View File

@ -546,18 +546,12 @@ int OsWin32_Help(WXHWND handle, const char* hlp, unsigned int cmd, const char* t
wxFileName fn = str; wxFileName fn = str;
fn.MakeAbsolute(); fn.MakeAbsolute();
str = fn.GetFullPath(); str = fn.GetFullPath();
unsigned long err = (unsigned long)::ShellExecute((HWND)handle, "open", str, NULL, NULL, SW_SHOWNORMAL); ::ShellExecute((HWND)handle, "open", str, NULL, NULL, SW_SHOWNORMAL);
if (err <= 32)
{
wxString msg;
msg << "Can't open '" << str << "': error " << err;
wxMessageBox(msg, "Campo", wxICON_WARNING | wxOK);
}
} }
return true; return true;
} }
OsWin32_Beep(1); OsWin32_Beep(1); // Error beep
return false; return false;
} }