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);
#ifdef DBG
if (tipo_sit == 1 && atol(idcespite) == 2004049L)
if (tipo_sit == 1 && atol(idcespite) == 1362)
tipo_sit = 1; // Put your breakpoint here
#endif

View File

@ -94,6 +94,8 @@ protected:
bool genera_nomi_output(const char* nome, TFilename& txt, TFilename& tmp) const;
bool salva_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:
};
@ -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);
}
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)
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));
//prima moda: nel campo CodiceListino ci va il codice Campo del Contratto del cliente (listino cliente per Hardy)
/*TString query;
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);
//Nel campo CodiceListino ci va il codice del Listino Campo associato al cliente in cfven
clienti.set("CodiceListino", curr_cod_list(codcf));
const TString& str_sconto = archivio_clienti.get(CFV_SCONTO).as_string();
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
bool TFile2Txt::genera_righelistini_txt()
{
const TDate oggi(TODAY);
TEsporta_listini_recordset righe_listini;
TISAM_recordset agenti("USE AGENTI");
@ -437,6 +451,7 @@ bool TFile2Txt::genera_righelistini_txt()
TString query;
query << "USE RCONDV";
query << "\nJOIN CONDV INTO TIPO=TIPO TIPOCF=TIPOCF CODCF==CODCF COD==COD";
query << "\nFROM TIPO=L";
query << "\nTO TIPO=L";
@ -449,13 +464,18 @@ bool TFile2Txt::genera_righelistini_txt()
TProgind progind(archivio_rcondv_items, "Listini...", false, true);
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.set("CodiceTerminale", codage);
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);
real prezzo = archivio_rcondv.get(RCONDV_PREZZO).as_real();

View File

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

View File

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

View File

@ -346,7 +346,8 @@ TPrintwin::TPrintwin(TTextfile& txt, const char* title)
_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 segno = abs_column>=0 ? 1 : -1;

View File

@ -394,11 +394,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
const TRectype& rcont = cont.row(codart);
//recupero i dati di interesse dalla riga del contratto
bool arrot;
if (rcont.get_int(LVRCONDV_CALCCONS) == 1)
arrot = true;
else
arrot = false;
const bool arrot = rcont.get_int(LVRCONDV_CALCCONS) == 1;
const real conguaglio = rcont.get_real(LVRCONDV_QTACONG);
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
TCausale_magazzino rit(caudt.causale_ritiro());
TCausale_magazzino con(caudt.causale_consegna());
const TCausale_magazzino rit(caudt.causale_ritiro());
const TCausale_magazzino con(caudt.causale_consegna());
TString8 magazzino;
TString8 magazzinoc;
@ -532,6 +528,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
long arr = quantita_arr.integer() % ppconf.integer();
//se sforo (arr > 0) allora calcolo quanti pezzi in più gli devo dare e aggiorno la quantità
if (arr > 0)
{
if (arr > ppconf.integer() * perarr / 100) //arr <= ppconf*perarr/100 -> formula calcolo congualgio di Tassan
{
arr = ppconf.integer() - arr;
@ -540,6 +537,7 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
else
quantita_arr -= arr;
}
}
//scrivo le quantità
rdoc.put(RDOC_QTA, quantita_arr); //quantità consegnata eventualmente arrotondata
@ -551,7 +549,9 @@ void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas,
//aggiorno il conguaglio sulla riga del contratto
//altrimenti se il record di riga contratto è vuoto aggiorno il log
if (!rcont.empty())
{
aggiorna_conguaglio((TRectype&)rcont, quantita_arr - quantita_noarr);
}
else
{
TString str;

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
const TRecmag_lavanderie& reclav = artrec.find_rec(last_esc);
real dotod = reclav.get_real(CLIFOGIAC_DOTOD);
real dotmp = reclav.get_real(CLIFOGIAC_DOTTM);
const real dotod = reclav.get_real(CLIFOGIAC_DOTOD);
const real dotmp = reclav.get_real(CLIFOGIAC_DOTTM);
rdoc.put("DOTOD", dotod);
TString16 tmp;
tmp << dotod;
msk.field(FR_JOLLY1).set(tmp);
msk.set(FR_JOLLY1, dotod);
}
if (rdoc.get(RDOC_CODAGG1).empty())
@ -1332,12 +1330,17 @@ void TGestione_bolle_app::salva_conguaglio(const TDocumento_mask& mask)
const TLaundry_contract cont(codcf, indsped, datadoc);
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);
FOR_EACH_DOC_ROW_BACK(d, r, row)
{
TRiga_documento& rdoc = (TRiga_documento&)*row;
if (!is_buono_ritiro) // 02-05-2012
{
const TCausale_lavanderie cau(rdoc.get(RDOC_CODAGG1));
if (cau.movcong())
{
@ -1349,6 +1352,7 @@ void TGestione_bolle_app::salva_conguaglio(const TDocumento_mask& mask)
rcondv.put(LVRCONDV_QTACONG, rdoc.get_real(RDOC_QTAGG5));
rcondv.rewrite();
}
}
}
const real ritat = rdoc.get_real(RDOC_QTAGG1);
@ -1517,14 +1521,11 @@ void TGestione_bolle_app::init_modify_mode(TMask &m)
//metodo che mi restituisce la giac
TGiac_per_cli& TGestione_bolle_app::giacenza()
{
return _giac;
}
{ return _giac; }
int lv3100( int argc, char* argv[])
{
TGestione_bolle_app a;
a.run( argc, argv, TR("Documenti di Trasporto"));
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);
//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
const TRectype& cfven = cache().get(LF_CFVEN, key);
@ -525,10 +525,7 @@ void TEvasione_ter_msk::genera_buono()
dotod += (rbpre.qta_consegnata() - rbpre.qta_ritirata());
rdoc.put("DOTOD", dotod);
bool dtmp = false;
if (datagen >= rcont.get_date(LVRCONDV_INDTTMP) && datagen <= rcont.get_date(LVRCONDV_FIDTTMP))
dtmp = true;
const bool dtmp = datagen >= rcont.get_date(LVRCONDV_INDTTMP) && datagen <= rcont.get_date(LVRCONDV_FIDTTMP);
if (dtmp)
{
rdoc.put("DOTMP", dottmp);
@ -559,9 +556,7 @@ void TEvasione_ter_msk::genera_buono()
TCausale_magazzino rit(cau.causale_ritiro());
TCausale_magazzino con(cau.causale_consegna());
TString8 magazzino;
TString8 magazzinoc;
TString8 magazzino, magazzinoc;
if (rit.get("S10").full())
magazzino = rit.get("S10").mid(0,5);
else
@ -574,6 +569,16 @@ void TEvasione_ter_msk::genera_buono()
rdoc.put(RDOC_CODMAG, magazzino);
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
@ -832,7 +837,6 @@ void TEvasione_ter_msk::riempi_sheet()
int TEvasione_ter_msk::arrotonda(const int quantita)
{
int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
int qta = quantita;
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
if (rcont.get_int(LVRCONDV_CALCCONS) == 1)
{
const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr");
//calcolo di quanti pezzi sforo
long arr = quantita % ppconf;
@ -887,7 +893,7 @@ void TEvasione_ter_msk::spezza_riga()
TToken_string chiave(key);
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 qtadacon = qr.get_qta_da_con();
@ -944,7 +950,7 @@ void TEvasione_ter_msk::evadi_da_terminale()
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"));
}
else
@ -960,8 +966,7 @@ void TEvasione_ter_msk::evadi_da_terminale()
msg << "Il pacco risulta già associato al buono numero " << numdoc;
warning_box(msg);
return;
}
} else
if (numdoc < 0)
{
TString msg;

View File

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

View File

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

View File

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

View File

@ -686,7 +686,7 @@ TTracciato770::TTracciato770(char tipo) : _tipo(tipo)
if (tipo == 'A')
{
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("Codice fiscale del fornitore", CF, 23, 16);
add_filler(39, 483);
@ -1368,45 +1368,6 @@ bool TTrasferimento770::append_record_b()
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);
key.cut(0) << "F|" << rec_nditte.get(NDT_RAPPR);
@ -1533,7 +1494,7 @@ bool TTrasferimento770::split(const char* path)
if (_save_headers)
{
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(5, cod_fis_dic()); // Codice fiscale del fornitore
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)
{
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)

View File

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

View File

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

View File

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

View File

@ -682,11 +682,11 @@ void CampoWizardPage4::OnSSAPick(wxCommandEvent& e)
const int nSerial = wxAtoi(strSerial);
if (nSerial > 1000 && nSerial < 10000)
{
wxString path("./SSAGetInfo.exe -nome ");
wxString path("./SSAGetInfo.exe -nome c:/");
path << strSerial;
wxExecute(path, wxEXEC_SYNC);
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.");
MessageBox(msg);
@ -855,7 +855,7 @@ int CampoWizardPage4::DongleTest()
if (serno == 0xFFFF)
{
wxString strSSA = wxFindFirstFile("*.ssax");
wxString strSSA = wxFindFirstFile("c:\\*.ssax");
if (!strSSA.IsEmpty())
{
strSSA = strSSA.After('\\');

View File

@ -377,7 +377,6 @@ int TMotore_application::read( TMask& m )
mask.reset_father_rows();
doc() = (TDocumento &)_rel->curr();
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->begin( );
_m->prompt( 5, 1, "Anteprima" );
_m->prompt( 5, 1, "Antepr." );
_m->picture(TOOL_PREVIEW);
_m->end( );
@ -1548,7 +1548,7 @@ void TMask_generator::genera( const TString& profilo )
_m->control( T_BOTTONE, DLG_PREVREC, 202 );
_m->begin( );
_m->prompt( 9, 1, "Indietro");
_m->prompt( 9, 1, "Prec.");
_m->message( "EXIT,305" );
_m->picture(TOOL_PREVREC);
_m->end( );
@ -1562,7 +1562,7 @@ void TMask_generator::genera( const TString& profilo )
_m->control( T_BOTTONE, DLG_NEXTREC, 202 );
_m->begin( );
_m->prompt( 11, 1, "Avanti");
_m->prompt( 11, 1, "Succ.");
_m->message( "EXIT,306" );
_m->picture(TOOL_NEXTREC);
_m->end( );

View File

@ -4,7 +4,7 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <modaut.h>
#include <dongle.h>
#include <postman.h>
#include <progind.h>
#include <reprint.h>
@ -969,7 +969,7 @@ class TReport_doc_app : public TSkeleton_application
TReport_doc_mask* _msk;
int _anno;
TString16 _codnum; // codice numerazione / profilo
TString16 _codnum, _tipodoc; // codice numerazione / profilo
long _ndoc, _codcf;
char _tipocf;
bool _no_print_dlg;
@ -984,9 +984,9 @@ protected:
void print_trans(const char* ininame);
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;
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,
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;
@ -998,13 +998,24 @@ public:
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;
_codnum = cn;
_ndoc = nd;
_tipocf = tcf;
_codcf = cf;
if (doc)
{
_anno = doc->get(DOC_ANNO).as_int();
_codnum = doc->get(DOC_CODNUM).as_string();
_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
@ -1015,11 +1026,49 @@ bool TReport_doc_app::get_next_pdf(int anno, long ditta, const char* codnum, lon
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
{
if (_tipodoc.full())
{
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;
const TString& maddr = cache().get(LF_CLIFO, key, CLI_DOCMAIL);
return maddr;
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,
@ -1029,8 +1078,7 @@ bool TReport_doc_app::get_next_mail(TToken_string& to, TToken_string& cc, TToken
if (_ndoc > 0L)
{
to = get_mail_address();
ok = to.full();
ok = get_mail_address(to, cc);
if (ok)
{
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()
{
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;
return TSkeleton_application::create();
@ -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);
arc = cn.auto_archive();
}
set_next_pdf(doc.get(DOC_ANNO).as_int(), doc.get(DOC_CODNUM).as_string(),
doc.get(DOC_NDOC).as_int(), doc.get(DOC_TIPOCF).as_string()[0],
doc.get(DOC_CODCF).as_int());
set_next_pdf(&doc);
// const bool send_mail = ( mode == out_mail || mode == out_signed_mail) && get_mail_address().full();
const bool send_mail = mail_requested && get_mail_address().full();
TToken_string to, cc;
const bool send_mail = mail_requested && get_mail_address(to, cc);
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
@ -1247,8 +1293,9 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
mail_book->archive(NULL, signature);
TString mesg;
TToken_string to, cc; get_mail_address(to, cc);
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);
}
}
@ -1333,7 +1380,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
if (book.pages() > 0)
{
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)
book.add(mail_log);

View File

@ -87,8 +87,7 @@ protected: // TApplication
void set_options();
void generate();
public:
TGenerazioneEffetti_app() {_msk = NULL; _num_sheet = NULL;}
virtual ~TGenerazioneEffetti_app() { }
TGenerazioneEffetti_app() : _msk(NULL), _num_sheet(NULL) {}
};
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();
bool found = FALSE;
const TString16 tipo(doc->tipo().codice());
const TString4 tipo(doc->tipo().codice());
const char stato = doc->stato();
for (int i=0;i<items && !found;i++)
{
@ -322,9 +321,14 @@ bool TGenerazioneEffetti_app::doc_tipo_stato_ok(TDocumento* doc)
int TGenerazioneEffetti_app::change_doc_status(TDocumento* doc)
// Cambia lo stato del documento
{
int err = 0;
if (doc->stato() != _final_doc_status)
{
doc->stato(_final_doc_status);
return doc->rewrite();
err = doc->rewrite();
}
return err;
}
@ -459,10 +463,11 @@ void TGenerazioneEffetti_app::generate()
set_options();
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
{
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
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);
TString msg;
const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
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;
}
TString msg;
msg << "Selezione documenti " << codnum;
if (sort_by_date)
{
@ -537,12 +543,15 @@ void TGenerazioneEffetti_app::generate()
// effetti rimasti
for (; j<cur_items; j++)
{
p.setstatus(j+1);
if (!p.setstatus(j+1))
break;
doc_cur = j;
TDocumento* doc = new TDocumento;
if (doc->read(doc_cur.curr()) == NOERR && // legge il documento
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
if (doc_cur.curr().get(DOC_CODNUM) != codnum)
continue;
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();
if (pag.code().not_empty())
@ -554,6 +563,7 @@ void TGenerazioneEffetti_app::generate()
TLista_documenti lista_in,lista_out;
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
gen_eff.set_writeable(FALSE);
@ -562,7 +572,7 @@ void TGenerazioneEffetti_app::generate()
else
{
add_to_group_list(doc); // Aggiorna la lista degli effetti da raggruppare
delete doc;
doc = NULL; // Non cancellarlo in quanto messo nella lista
}
}
else
@ -570,16 +580,15 @@ void TGenerazioneEffetti_app::generate()
int err = change_doc_status(doc); // Cambia lo stato al documento
if (err != NOERR)
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;
}
}
// 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
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)
message_box("Totale effetti generati: %ld", tot);

View File

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

View File

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

View File

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

View File

@ -554,7 +554,7 @@ public:
bool is_risorsa() const { return tipo().tipo() == RIGA_RISORSE;}
bool is_attrezzatura() const { return tipo().tipo() == RIGA_ATTREZZATURE;}
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_descrizione() const { return tipo().tipo() == RIGA_DESCRIZIONI;}
bool is_articolo() const;
@ -564,13 +564,12 @@ public:
bool is_evasa() const; // Ritorna vero se la riga è evasa
void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); }
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
void set_doc(TDocumento * doc) { _doc = 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 void zero(const char * fieldname);
virtual void zero(char c = '\0');

View File

@ -1442,11 +1442,15 @@ const TRectype* TRiga_documento::find_original_rdoc() const
key.add(get(RDOC_DAANNO));
key.add(get(RDOC_DAPROVV));
key.add(get(RDOC_DANDOC));
for (int r = 1; ; r++)
for (int r = 0; ; r++)
{
if (r == 0)
key.add(id, 4);
else
key.add(r, 4);
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)
return &rec;
}

View File

@ -13,6 +13,11 @@
#include "../cg/cg2101.h"
#endif
#ifndef __RECARRAY_H
#include <recarray.h>
#endif
class TLista_documenti : public TObject // velib04
{
@ -565,7 +570,7 @@ protected:
// Scrive i record array degli effetti raggruppati
error_type write_groups(bool interattivo);
// 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
error_type change_doc_status(TDocumento&);
// Verifica se non ci sono stati errori
@ -575,7 +580,7 @@ public:
const TDate& data_elab, bool interattivo = false);
// 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; }
// void set_group(TAssoc_array& a) { _group_array = a; }
void set_writeable(const bool b) { _can_write = b; }

View File

@ -862,10 +862,8 @@ bool TContabilizzazione::load_parameters()
// il tutto.
if (_search_seq->empty_items())
{
error_box("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione.");
return false;
}
return error_box(TR("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione."));
_sc_enabled = conf.get_bool("GesSal","cg");
_in_enabled = dongle().active(INAUT);
_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
{
TString8 codcaus;
TString4 codcaus;
TToken_string key;
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)
// Compila la testata
{
TRectype& mov_rec = _movimento->curr();
const bool acquisto = doc.get_char(DOC_TIPOCF) == 'F';
// Reperisce la data documento
const TDate datadoc(doc.data());
@ -1272,8 +1268,8 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
}
// Dati del cliente...
TString4 tipocf(doc.get(DOC_TIPOCF));
long codcf = doc.get_long(DOC_CODCF);
const TString4 tipocf(doc.get(DOC_TIPOCF));
const long codcf = doc.get_long(DOC_CODCF);
TString80 occas;
{
TLocalisamfile& cli_file = _clifo->lfile();
@ -1304,7 +1300,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
// Codice pagamento
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
_cpg->put("CODTAB",codpag);
if (_cpg->read() != NOERR)
@ -1313,7 +1309,9 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
return _error;
}
}
// Mo' riempie il record della incornata (testata)
TRectype& mov_rec = _movimento->curr();
mov_rec.zero();
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);
@ -2666,29 +2664,67 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
// Scrive le scadenze. Liberamente tratto da cg2104.cpp.
{
const TRectype& head = _movimento->curr();
const long nreg = head.get_long(MOV_NUMREG);
// const real change(head.get_real(MOV_CAMBIO));
int anno = head.get_int(MOV_ANNOIVA);
if (head.get_real(MOV_TOTDOC) == ZERO)
if (head.get_real(MOV_TOTDOC).is_zero())
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)
{
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
{
numpart = doc.get(DOC_NUMDOCRIF);
if (_caus->iva() == iva_vendite && !doc.tipo().nota_credito())
if (_caus->iva() == iva_vendite && !is_nc)
numpart.cut(0);
if (numpart.blank())
numpart = head.get(MOV_NUMDOC);
else
{
TDate ddr = doc.get_date(DOC_DATADOCRIF);
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
if (ddr.ok())
anno = ddr.year();
}
@ -2894,7 +2930,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
{
const TRiga_partite& fatt = newgame->riga(p);
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)
break;
}

View File

@ -125,39 +125,68 @@ void TGenerazione_effetti::display_error(TDocumento& doc)
error_type TGenerazione_effetti::change_doc_status(TDocumento& doc)
// Cambia lo stato del documento
{
doc.stato(get("S4")[0]);
const char stato_finale = get("S4")[0];
if (doc.stato() != stato_finale)
{
doc.stato(stato_finale);
if (doc.rewrite() != NOERR)
_error = chg_stat_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
{
const int items = group_array.items();
if (items > 0)
{
TProgind pi(items, "Cambio stato documenti", false);
_error = no_error;
TToken_string * group_element;
int i=0;
TString msg;
const char stato_finale = get_char("S4");
// 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())
{
if (!pi.addstatus(1))
break;
group_element->restart();
const int doc_items = group_element->items();
for (int j=0;j<doc_items;j++)
{
TToken_string t(group_element->get(j),'$');
char provv = t.get_char(0);
int anno = t.get_int(1);
TString codnum(t.get(2));
long numdoc = t.get_long(3);
if (doc.read(provv,anno,codnum,numdoc) == NOERR) // Legge il documento
const int anno = t.get_int(1);
const TString4 codnum(t.get(2));
const long numdoc = t.get_long(3);
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.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);
}
}
}
}
return _error;
@ -169,29 +198,39 @@ error_type TGenerazione_effetti::write_groups(bool interattivo)
int err = NOERR;
int i;
TString msg;
TProgind pi(items, "Scrittura effetti", false);
_error = no_error;
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];
const real importo = effetto.get_real(EFF_IMPORTO);
if (importo > ZERO) // Gli effetti negativi non vanno scritti
{
const char tipocf = effetto.get_char(EFF_TIPOCF);
const long codcf = effetto.get_long(EFF_CODCF);
TString key;
key.format("%c|%ld", tipocf, codcf);
real impmin;
if (!interattivo)
{
TString8 key; key.format("%c|%ld", tipocf, codcf);
impmin = real(cache().get(LF_CFVEN, key, CFV_IMPMINEFF));
if (impmin == ZERO)
if (impmin.is_zero())
impmin = _impmin;
}
if (effetto.get_int(EFF_TIPOPAG) == _rid || importo >= impmin)
{
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
_effetti_array.destroy(i);
}
@ -254,7 +293,7 @@ error_type TGenerazione_effetti::write_groups(bool interattivo)
// per l'effetto 5 vale la fattura 3.
// 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...
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");
#ifdef DBG
TProgind p(items,msg1,TRUE,TRUE,1);
TProgind p(items,msg1,TRUE,TRUE);
#else
TProgind p(items,msg1,FALSE,TRUE,1);
TProgind p(items,msg1,FALSE,TRUE);
#endif
TToken_string * group_element;
// 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())
{
#ifdef DBG
if (p.iscancelled()) break;
#endif
p.setstatus(i+1);
if (!p.setstatus(i+1))
break;
// Ciclo sui documenti da raggruppare
group_element->restart();
const int doc_items = group_element->items();
for (j=0;j<doc_items;j++)
{
#ifdef DBG
if (p.iscancelled()) break;
#endif
if (p.iscancelled())
break;
TToken_string t(group_element->get(j),'$');
const char provv = t.get_char(0);
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++)
{
TEffetto& effetto=(TEffetto&)_effetti_array[index];
const TEffetto& effetto = (const TEffetto&)_effetti_array[index];
if (datascad == effetto.get_date(EFF_DATASCAD))
break;
}
@ -483,16 +518,16 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
} // Ciclo sui gruppi
p.close_modal();
// Cambia lo stato a tutti i documenti raggruppati
long tot = 0L;
if (_can_write)
{
xvtil_statbar_set("Scrittura effetti raggruppati in corso...");
do_events();
if (write_groups(interattivo) == no_error)
{
tot = _effetti_array.items();
change_group_status(doc, group_array);
change_group_status(doc, group_array, fast);
}
}
_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)
{
const TSpesa_prest & spesa = r.spesa();
if (spesa.tipo() == 'V')
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())
{
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)
{
@ -3967,7 +3966,6 @@ void TDocumento_mask::update_father_rows(bool add)
key.add(original_row->get(RDOC_IDRIGA));
real* qta = (real*)_father_rows.objptr(key);
if (qta == NULL)
{
qta = new real;
@ -3979,14 +3977,13 @@ void TDocumento_mask::update_father_rows(bool add)
if (r.is_articolo())
{
TArticolo& art = cached_article(r.get(RDOC_CODARTMAG));
value = art.convert_to_um(value, original_row->get(RDOC_UMQTA), r.get(RDOC_UMQTA));
}
if(add)
*qta += value;
else
*qta -= value;
if (*qta == ZERO)
if (qta->is_zero())
_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;
fn.MakeAbsolute();
str = fn.GetFullPath();
unsigned long err = (unsigned long)::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);
}
::ShellExecute((HWND)handle, "open", str, NULL, NULL, SW_SHOWNORMAL);
}
return true;
}
OsWin32_Beep(1);
OsWin32_Beep(1); // Error beep
return false;
}