Milgiorata stampa scadenzario in presenza di "false" partite aperte

git-svn-id: svn://10.65.10.50/branches/R_10_00@22842 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-04-09 15:08:50 +00:00
parent 658ee8ae80
commit ec2edfbaaa
6 changed files with 64 additions and 44 deletions

View File

@ -4,7 +4,7 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
const int n = (argc > 1) ? (atoi(&argv[1][1])) : 0; const int n = (argc > 1) ? (argv[1][1]-'0') : 0;
switch(n) switch(n)
{ {
case 1: sc0200(argc,argv); break; // Gestione partite case 1: sc0200(argc,argv); break; // Gestione partite

View File

@ -26,7 +26,7 @@ END
NUMBER F_GRUPPO 3 NUMBER F_GRUPPO 3
BEGIN BEGIN
PROMPT 26 1 "Gruppo " PROMPT 27 1 "Gruppo "
USE LF_PCON SELECT CONTO=="" USE LF_PCON SELECT CONTO==""
INPUT GRUPPO F_GRUPPO INPUT GRUPPO F_GRUPPO
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
@ -38,7 +38,7 @@ END
NUMBER F_CONTO 3 NUMBER F_CONTO 3
BEGIN BEGIN
PROMPT 40 1 "Conto " PROMPT 41 1 "Conto "
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO=="") USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO=="")
INPUT GRUPPO F_GRUPPO INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO INPUT CONTO F_CONTO
@ -55,7 +55,7 @@ END
NUMBER F_SOTTOCONTO 6 NUMBER F_SOTTOCONTO 6
BEGIN BEGIN
PROMPT 54 1 "Sottoconto " PROMPT 55 1 "Sottoc. "
USE LF_PCON SELECT SOTTOCONTO!="" USE LF_PCON SELECT SOTTOCONTO!=""
COPY INPUT F_CONTO COPY INPUT F_CONTO
INPUT SOTTOCONTO F_SOTTOCONTO INPUT SOTTOCONTO F_SOTTOCONTO
@ -74,7 +74,7 @@ END
NUMBER F_CLIENTE 6 NUMBER F_CLIENTE 6
BEGIN BEGIN
PROMPT 54 1 "Cliente " PROMPT 55 1 "Cliente "
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE INPUT CODCF F_CLIENTE
@ -92,7 +92,7 @@ END
NUMBER F_FORNITORE 6 NUMBER F_FORNITORE 6
BEGIN BEGIN
PROMPT 54 1 "Fornitore " PROMPT 55 1 "Fornitore "
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF "F" INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE INPUT CODCF F_FORNITORE

View File

@ -155,7 +155,7 @@ BEGIN
DISPLAY "Diff. Cambio@15R" DIFFCAM DISPLAY "Diff. Cambio@15R" DIFFCAM
DISPLAY "Ritenute fiscali@15R" RITENUTE DISPLAY "Ritenute fiscali@15R" RITENUTE
DISPLAY "Ritenute sociali@15R" RITSOC DISPLAY "Ritenute sociali@15R" RITSOC
DISPLAY "P.N." NREG DISPLAY "P.N.@7R" NREG
END END
ENDMASK ENDMASK

View File

@ -288,6 +288,9 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con
const TDate datacomp = msk.get(F_DATACOMP); const TDate datacomp = msk.get(F_DATACOMP);
const TValuta valuta(msk, F_CODVAL, F_DATACAMBIO, F_CAMBIO); const TValuta valuta(msk, F_CODVAL, F_DATACAMBIO, F_CAMBIO);
TEsercizi_contabili esc;
const int annoes = esc.date2esc(datacomp);
const TCausale caus(msk.get(F_CAUSALE), datareg.year()); const TCausale caus(msk.get(F_CAUSALE), datareg.year());
const int riga_abb = tipo_cf == 'C' ? RIGA_ABBUONI_PASSIVI : RIGA_ABBUONI_ATTIVI; const int riga_abb = tipo_cf == 'C' ? RIGA_ABBUONI_PASSIVI : RIGA_ABBUONI_ATTIVI;
TBill conto_abbuoni; caus.bill(riga_abb, conto_abbuoni); TBill conto_abbuoni; caus.bill(riga_abb, conto_abbuoni);
@ -301,6 +304,8 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con
head.put(MOV_CODCAUS, msk.get(F_CAUSALE)); head.put(MOV_CODCAUS, msk.get(F_CAUSALE));
head.put(MOV_DATAREG, datareg); head.put(MOV_DATAREG, datareg);
head.put(MOV_DATACOMP, datacomp); head.put(MOV_DATACOMP, datacomp);
head.put(MOV_ANNOIVA, datareg.year());
head.put(MOV_ANNOES, annoes);
head.put(MOV_DESCR, TR("Abbuoni automatici")); head.put(MOV_DESCR, TR("Abbuoni automatici"));
if (valuta.in_valuta()) if (valuta.in_valuta())
valuta.put(head); valuta.put(head);
@ -365,6 +370,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con
TRectype& rmov = mov.cg(i); TRectype& rmov = mov.cg(i);
rmov.put(RMV_SEZIONE, imp.sezione()); rmov.put(RMV_SEZIONE, imp.sezione());
rmov.put(RMV_IMPORTO, imp.valore()); rmov.put(RMV_IMPORTO, imp.valore());
rmov.put(RMV_ANNOES, annoes);
} }
if (abbuoni.is_zero()) if (abbuoni.is_zero())
{ {
@ -379,6 +385,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con
rmov.put(RMV_ROWTYPE, tipo_cf == 'F' ? 'A' : 'P'); // Abbuoni attivi o passivi? rmov.put(RMV_ROWTYPE, tipo_cf == 'F' ? 'A' : 'P'); // Abbuoni attivi o passivi?
rmov.put(RMV_SEZIONE, abbuoni.sezione()); rmov.put(RMV_SEZIONE, abbuoni.sezione());
rmov.put(RMV_IMPORTO, abbuoni.valore()); rmov.put(RMV_IMPORTO, abbuoni.valore());
rmov.put(RMV_ANNOES, annoes);
conto_abbuoni.put(rmov); conto_abbuoni.put(rmov);
} }
@ -390,6 +397,7 @@ bool TAbbuona_partite::elabora(const TMask& msk, TAbbuona_sheet& scad_sheet) con
rmov.put(RMV_ROWTYPE, 'C'); // Differenze cambio rmov.put(RMV_ROWTYPE, 'C'); // Differenze cambio
rmov.put(RMV_SEZIONE, diffcam.sezione()); rmov.put(RMV_SEZIONE, diffcam.sezione());
rmov.put(RMV_IMPORTO, diffcam.valore()); rmov.put(RMV_IMPORTO, diffcam.valore());
rmov.put(RMV_ANNOES, annoes);
conto_diffcam.put(rmov); conto_diffcam.put(rmov);
} }

View File

@ -27,7 +27,7 @@ struct _LinearTotal : public TObject // Oggetto base per gli elementi di tlg, t
_bo, // Bonifici _bo, // Bonifici
_al; // Altri _al; // Altri
virtual TObject* dup() const { return new _LinearTotal(*this); } virtual TObject* dup() const { return new _LinearTotal(*this); }
_LinearTotal() {_is = 0.0; _ip = 0.0; _rd = 0.0; _ri = 0.0; _bo = 0.0; _al = 0.0; } _LinearTotal() { _is = _ip = _rd = _ri = _bo = _al = ZERO; }
}; };
enum tipo_st {nessuno=0, tutti=1, clienti=2, fornitori=3, altri=4}; enum tipo_st {nessuno=0, tutti=1, clienti=2, fornitori=3, altri=4};
@ -70,7 +70,7 @@ class TStampaScadenzario : public TPrintapp
// Se _tipost=altri scorre il piano dei conti. // Se _tipost=altri scorre il piano dei conti.
// Se _tipost=clienti || fornitori scorre clifo. // Se _tipost=clienti || fornitori scorre clifo.
int _striepilogo; // 0 = non stampa 1 = stampa il riepilogo giornaliero per pagamento 2 = stampa il riepilogo mensile per pagamento int _striepilogo; // 0 = non stampa 1 = stampa il riepilogo giornaliero per pagamento 2 = stampa il riepilogo mensile per pagamento
TString16 _codag; // codice agente selezionato TString8 _codag; // codice agente selezionato
int _tipopag; // tipo pagamento selezionato int _tipopag; // tipo pagamento selezionato
TRecnotype _last_bank_rec; // ultimo record con banca stampato TRecnotype _last_bank_rec; // ultimo record con banca stampato
real _w_imp_pag, _w_imp_res; // Qui dentro memorizza i valori calcolati in calcola_pagamenti, real _w_imp_pag, _w_imp_res; // Qui dentro memorizza i valori calcolati in calcola_pagamenti,
@ -135,7 +135,7 @@ public:
void look_in_cache(real& a, real& b, real& c, TAssoc_array& uns, TAssoc_array& unsnc, TAssoc_array& unsins, TString& k); void look_in_cache(real& a, real& b, real& c, TAssoc_array& uns, TAssoc_array& unsnc, TAssoc_array& unsins, TString& k);
void calcola_unassigned(const TString& k); void calcola_unassigned(const TString& k);
void calcola_pagamenti(real& imp_scad, int riga, int rata, TBill& bill); // calcola i pagamenti effettuati per questa rata e il residuo eventuale void calcola_pagamenti(real& imp_scad, int riga, int rata, TBill& bill); // calcola i pagamenti effettuati per questa rata e il residuo eventuale
const char * tipi_tab(int tipo); const char * tipi_tab(int tipo) const;
TLocalisamfile& pagamenti() const { return *_pagsca; } TLocalisamfile& pagamenti() const { return *_pagsca; }
@ -245,10 +245,10 @@ bool TStampaScadenzario::filter_func(const TRelation *r)
} }
} }
} }
if (app()._codag.not_empty()) if (app()._codag.full())
{ {
const TRectype& rec = r->curr(); const TRectype& rec = r->curr();
const TString16 codag = rec.get(SCAD_CODAG); const TString& codag = rec.get(SCAD_CODAG);
if (app()._codag != codag) if (app()._codag != codag)
return false; return false;
} }
@ -431,32 +431,42 @@ void TStampaScadenzario::look_in_cache(real& a, real& b, real& c,
k << rp.get(PART_NUMPART); k << rp.get(PART_NUMPART);
a = b = c = ZERO; a = b = c = ZERO;
if (uns.is_key(k)) a = (real&)uns[k]; if (uns.is_key(k)) a = (real&)uns[k];
if (unsnc.is_key(k)) b = (real&)unsnc[k]; if (unsnc.is_key(k)) b = (real&)unsnc[k];
if (unsins.is_key(k)) c = (real&)unsins[k]; if (unsins.is_key(k)) c = (real&)unsins[k];
} }
void TStampaScadenzario::calcola_pagamenti(real& imp_scad, int riga, int rata, TBill& bill) void TStampaScadenzario::calcola_pagamenti(real& imp_scad, int riga, int rata, TBill& bill)
{ {
TAssoc_array& uns = (TAssoc_array&) _uns_cache[0];
TAssoc_array& unsnc = (TAssoc_array&) _uns_cache[1];
TAssoc_array& unsins = (TAssoc_array&) _uns_cache[2];
if (!_p->esiste(riga, rata)) if (!_p->esiste(riga, rata))
{ {
imp_scad = _w_imp_pag = _w_imp_res = ZERO;
error_box("Nella partita %c %ld %d %s la rata %d non corrisponde ad una riga di fattura (%d)", error_box("Nella partita %c %ld %d %s la rata %d non corrisponde ad una riga di fattura (%d)",
bill.tipo(), bill.codclifo(), _p->anno(), (const char*)_p->numero(), rata, riga); bill.tipo(), bill.codclifo(), _p->anno(), (const char*)_p->numero(), rata, riga);
return; return;
} }
const TRiga_scadenze& rs = _p->rata(riga, rata); const TRiga_scadenze& rs = _p->rata(riga, rata);
// Non perder tempo con partite chiuse!
if (!_ratesald && (rs.chiusa() || _p->chiusa(true)))
{
imp_scad = rs.importo(_stvaluta).valore();
_w_imp_pag = imp_scad;
_w_imp_res = ZERO;
return;
}
TAssoc_array& uns = (TAssoc_array&)_uns_cache[0];
TAssoc_array& unsnc = (TAssoc_array&)_uns_cache[1];
TAssoc_array& unsins = (TAssoc_array&)_uns_cache[2];
const char ssez = _p->riga(riga).sezione(); const char ssez = _p->riga(riga).sezione();
const char* field = (_stvaluta && rs.in_valuta()) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO; const char* field = (_stvaluta && rs.in_valuta()) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
const char* sfield = (_stvaluta && rs.in_valuta()) ? SCAD_IMPORTOVAL : SCAD_IMPORTO; const char* sfield = (_stvaluta && rs.in_valuta()) ? SCAD_IMPORTOVAL : SCAD_IMPORTO;
TImporto totalep, // Totale dei pagamenti TImporto totalep, // Totale dei pagamenti
scdz; // Importo in scadenza scdz; // Importo in scadenza
scdz += TImporto(ssez,rs.get_real(sfield)); scdz += TImporto(ssez,rs.get_real(sfield));
totalep += rs.importo_pagato(_stvaluta); // Quanto e' stato pagato per questa scadenza? totalep += rs.importo_pagato(_stvaluta); // Quanto e' stato pagato per questa scadenza?
for (int p = rs.last(); p > 0; p = rs.pred(p)) // Calcola il totale pagamenti e discrimina for (int p = rs.last(); p > 0; p = rs.pred(p)) // Calcola il totale pagamenti e discrimina
{ // Il TIPOMOV: 1,5 : fattura insoluto { // Il TIPOMOV: 1,5 : fattura insoluto
const TRectype pag = rs.row(p); // 2 : nota di credito const TRectype pag = rs.row(p); // 2 : nota di credito
@ -522,7 +532,7 @@ void TStampaScadenzario::calcola_pagamenti(real& imp_scad, int riga, int rata, T
_w_imp_res = imp_scad - _w_imp_pag; _w_imp_res = imp_scad - _w_imp_pag;
} }
const char * TStampaScadenzario::tipi_tab(int tipo) const char * TStampaScadenzario::tipi_tab(int tipo) const
{ {
switch (tipo) switch (tipo)
{ {
@ -638,7 +648,7 @@ bool TStampaScadenzario::preprocess_page(int file, int counter)
// Se la rata e' stata saldata e non e' abilitato il flag di stampa // Se la rata e' stata saldata e non e' abilitato il flag di stampa
// oppure l'importo in scadenza e' 0 allora salta alla prossima scadenza // oppure l'importo in scadenza e' 0 allora salta alla prossima scadenza
if (!_ratesald && _w_imp_res == 0.0) if (!_ratesald && _w_imp_res.is_zero())
return false; return false;
_annopart.format("%d",annop); _annopart.format("%d",annop);
@ -653,26 +663,28 @@ bool TStampaScadenzario::preprocess_page(int file, int counter)
print_real(_imp_scad, imp_scad, print_in_valuta ? _codval : EMPTY_STRING); print_real(_imp_scad, imp_scad, print_in_valuta ? _codval : EMPTY_STRING);
if (_w_imp_pag != ZERO) if (!_w_imp_pag.is_zero())
print_real(_imp_pag, _w_imp_pag, print_in_valuta ? _codval : EMPTY_STRING); print_real(_imp_pag, _w_imp_pag, print_in_valuta ? _codval : EMPTY_STRING);
if (_w_imp_res != ZERO) if (!_w_imp_res.is_zero())
{
switch (tipo_pag) switch (tipo_pag)
{ {
case 1: // Rimesse dirette case 1: // Rimesse dirette
print_real(_rimdir, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING); print_real(_rimdir, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING);
break; break;
case 2: // ri.ba / Tratte case 2: // ri.ba / Tratte
case 3: case 3:
print_real(_riba, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING); print_real(_riba, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING);
break; break;
case 9: // Bonifici case 9: // Bonifici
print_real(_bonifico, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING); print_real(_bonifico, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING);
break; break;
default: // Altri default: // Altri
print_real(_altri, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING); print_real(_altri, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING);
break; break;
} }
}
} //if (file == LF_SCADENZE && !_end_printed)... } //if (file == LF_SCADENZE && !_end_printed)...
if (file == LF_CLIFO) if (file == LF_CLIFO)
@ -860,7 +872,6 @@ print_action TStampaScadenzario::postprocess_page(int file, int counter)
{ {
if (_modified) if (_modified)
reset_print(); reset_print();
return NEXT_PAGE; return NEXT_PAGE;
} }
@ -904,9 +915,10 @@ bool TStampaScadenzario::user_create()
_uns_cache.add(new TAssoc_array); // Note di credito _uns_cache.add(new TAssoc_array); // Note di credito
_uns_cache.add(new TAssoc_array); // Insoluti _uns_cache.add(new TAssoc_array); // Insoluti
TConfig conf (CONFIG_DITTA,"cg");
_m = new TSelection_ext_mask("sc2200a"); _m = new TSelection_ext_mask("sc2200a");
_m->enable(F_VALUTA,conf.get_bool("GesVal"));
const bool gv = ini_get_bool(CONFIG_DITTA, "cg", "GesVal");
_m->enable(F_VALUTA, gv);
enable_print_menu(); enable_print_menu();
return true; return true;
@ -1145,10 +1157,10 @@ bool TStampaScadenzario::set_print(int)
if (sel_datafatt) if (sel_datafatt)
{ {
TString filter("(BETWEEN("); TString80 filter("(BETWEEN(");
filter << LF_PARTITE << "->" << PART_DATADOC << ",\"" << _datai.string() << "\",\"" << _dataf.string() << "\"))"; filter << LF_PARTITE << "->" << PART_DATADOC << ",\"" << _datai.string() << "\",\"" << _dataf.string() << "\"))";
add_filter_fatt(get_cursor(_cur1), filter);
add_filter_fatt(get_cursor(_cur1), filter);
add_filter_fatt(get_cursor(_cur11), filter); add_filter_fatt(get_cursor(_cur11), filter);
add_filter_fatt(get_cursor(_cur2), filter); add_filter_fatt(get_cursor(_cur2), filter);
add_filter_fatt(get_cursor(_cur3), filter); add_filter_fatt(get_cursor(_cur3), filter);

View File

@ -108,7 +108,7 @@ END
LISTBOX F_RIEPILOGO 1 12 LISTBOX F_RIEPILOGO 1 12
BEGIN BEGIN
PROMPT 33 7 "Prospetto per pagamento" PROMPT 33 7 "Prospetto per pagamento "
ITEM "0|Nessuno" ITEM "0|Nessuno"
ITEM "1|Giornaliero" ITEM "1|Giornaliero"
ITEM "2|Mensile" ITEM "2|Mensile"