Patch level : 2.1.059

Files correlati     : Quelli delle patch 2.0
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 2.0 patch 756


git-svn-id: svn://10.65.10.50/trunk@12146 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2004-06-04 11:20:51 +00:00
parent 185562c39b
commit 82496e7b61
23 changed files with 414 additions and 263 deletions

View File

@ -12,6 +12,7 @@
#include "batbdel.h" #include "batbdel.h"
#include "batbval.h" #include "batbval.h"
#include "batbver.h" #include "batbver.h"
#include "batbnot.h"
#define REG_JOURNAL 5 #define REG_JOURNAL 5
#define TAB_BANCHE "%BAN" #define TAB_BANCHE "%BAN"
@ -23,6 +24,7 @@
#define TAB_VERSAMENTI "%VER" #define TAB_VERSAMENTI "%VER"
// #define TAB_MAGAZZINI "MAG" // Spostato in mg0 -0 // #define TAB_MAGAZZINI "MAG" // Spostato in mg0 -0
#define TAB_GRMERC "GMC" #define TAB_GRMERC "GMC"
#define TAB_NOTECLI "%NOT"
class TGeneric_table_app : public TTable_application class TGeneric_table_app : public TTable_application
{ {
@ -43,6 +45,8 @@ protected: // TRelation_application
virtual void init_insert_mode(TMask& m) ; virtual void init_insert_mode(TMask& m) ;
virtual void init_modify_mode(TMask& m); virtual void init_modify_mode(TMask& m);
virtual void init_query_mode (TMask&); virtual void init_query_mode (TMask&);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
protected: protected:
@ -51,6 +55,10 @@ protected:
static bool codcab_handler(TMask_field& f, KEY k); static bool codcab_handler(TMask_field& f, KEY k);
static bool codmag_handler(TMask_field& f, KEY k); static bool codmag_handler(TMask_field& f, KEY k);
static bool codgmc_handler(TMask_field& f, KEY k); static bool codgmc_handler(TMask_field& f, KEY k);
static bool desnot_handler(TMask_field& f, KEY k);
void fragment_string();
void glue_string();
public: public:
bool exist_journal() { return _exist_journal; } bool exist_journal() { return _exist_journal; }
@ -578,6 +586,17 @@ bool TGeneric_table_app::codgmc_handler(TMask_field& f, KEY k)
} }
return TRUE; return TRUE;
} }
bool TGeneric_table_app::desnot_handler(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
const TString& stringone = f.get();
if (stringone.len() > 320)
return f.error_box("La nota non puo' superare i 320 caratteri");
}
return true;
}
bool TGeneric_table_app::user_create() bool TGeneric_table_app::user_create()
{ {
@ -613,23 +632,7 @@ bool TGeneric_table_app::user_create()
{ {
mask.set_handler(FLD_TABCAM_S4, change_decimals_handler); mask.set_handler(FLD_TABCAM_S4, change_decimals_handler);
} }
/* OB600040
if (name == TAB_VERSAMENTI)
{
TLocalisamfile& ver = get_relation()->lfile();
ver.put("CODTAB","199301");
if (ver.read() != NOERR) // Se %VER non esiste la crea
{
ver.put("CODTAB","199301");
ver.put("R0","1.5"); ver.put("R1","1.5");
ver.put("R2","1.5"); ver.put("R3","1.5"); ver.put("R4","1.5");
ver.put("R5","50500"); ver.put("R7","200000");
ver.put("R11","88"); ver.put("R12","88");
if (ver.write() != NOERR)
error_box("Errore %d in scrittura sulla tabella versamenti",ver.status());
}
}
*/
if (name == TAB_CAMBI) if (name == TAB_CAMBI)
set_search_field(FLD_TABCAM_D0); set_search_field(FLD_TABCAM_D0);
@ -641,16 +644,70 @@ bool TGeneric_table_app::user_create()
if (name == TAB_GRMERC) if (name == TAB_GRMERC)
mask.set_handler(101, codgmc_handler); mask.set_handler(101, codgmc_handler);
if (name == TAB_NOTECLI)
mask.set_handler(F_NOT_DESC, desnot_handler);
} }
return ok; return ok;
} }
//folle metodo per suddividere una stringa lunga in piu' stringhe corte da mettere nei campi
//stringa delle tabelle (per ora solo tabella %NOT)
void TGeneric_table_app::fragment_string()
{
TMask& mask = *get_mask();
TString stringone = mask.get(F_NOT_DESC);
TRectype& rec = get_relation()->curr();
TString4 fieldname;
int tot_length = 0;
stringone.replace('\n', (char)0xB6);
for (int i = 0; i < 6; i++)
{
fieldname.format("S%d", i);
const int length = rec.length(fieldname);
const TString& pezzo = stringone.mid(tot_length, length);
rec.put(fieldname, pezzo);
tot_length += length;
}
}
void TGeneric_table_app::glue_string()
{
TMask& mask = *get_mask();
TString stringone;
TRectype& rec = get_relation()->curr();
TString4 fieldname;
for (int i = 0; i < 6; i++)
{
fieldname.format("S%d", i);
stringone << rec.get(fieldname);
}
stringone.replace((char)0xB6, '\n');
mask.set(F_NOT_DESC, stringone);
}
bool TGeneric_table_app::user_destroy() bool TGeneric_table_app::user_destroy()
{ {
return Tab_application::user_destroy(); return Tab_application::user_destroy();
} }
int TGeneric_table_app::read(TMask& m)
{
int err = Tab_application::read(m);
if (get_tabname() == TAB_NOTECLI)
glue_string();
return err;
}
int TGeneric_table_app::write(const TMask& m)
{
if (get_tabname() == TAB_NOTECLI)
fragment_string();
return Tab_application::write(m);
}
int TGeneric_table_app::rewrite(const TMask& m) int TGeneric_table_app::rewrite(const TMask& m)
{ {
if (get_tabname() == TAB_REGISTRI && !m.get_bool(F_CONFIG)) if (get_tabname() == TAB_REGISTRI && !m.get_bool(F_CONFIG))
@ -663,6 +720,9 @@ int TGeneric_table_app::rewrite(const TMask& m)
if (what >= 0) if (what >= 0)
ini.set("Type", -1); ini.set("Type", -1);
} }
if (get_tabname() == TAB_NOTECLI)
fragment_string();
return Tab_application::rewrite(m); return Tab_application::rewrite(m);
} }

View File

@ -327,7 +327,7 @@ void BA3200_application::set_rows()
} }
else if (!is_compound) else if (!is_compound)
{ {
if (formato_campo.find("@pn")) if (formato_campo.find("@pn") >= 0)
picture = line.get(); picture = line.get();
else else
picture = ""; picture = "";
@ -345,8 +345,30 @@ void BA3200_application::set_rows()
_string_compound.add(""); _string_compound.add("");
_field_compound.add(s); _field_compound.add(s);
const int last = _string_compound.items() - 1; const int last = _string_compound.items() - 1;
//versione speciale per la stampa della tabella Note clienti!
set_row (riga_record, formato_campo, _string_compound.objptr(last)); if (_tabname == "%NOT")
{
//deve costruire la stampa tenendo conto anche dei return
TString stringone;
TRectype& rec = current_cursor()->curr();
TString4 fieldname;
for (int i = 0; i < 6; i++)
{
fieldname.format("S%d", i);
stringone << rec.get(fieldname);
}
stringone.replace((char)0xB6, '\n');
TParagraph_string para(stringone, 75);
for (int r = 0; r < para.items(); r++)
set_row(riga_record + r, "@3g%s", para.get());
//mette a TRUE la variabile _force_setpage delle printapp in modo da richiamare la set_rows() ad ogni cambio record
force_setpage();
}
else
set_row (riga_record, formato_campo, _string_compound.objptr(last));
} }
line = (const char *) _rpt->line(); line = (const char *) _rpt->line();
} }

View File

@ -5,14 +5,13 @@ STRING F_INIZIO1 3
BEGIN BEGIN
PROMPT 2 1 "Da codice " PROMPT 2 1 "Da codice "
FLAGS "U" FLAGS "U"
HELP "Codice da cui iniziare la stampa. Vuoto = inizio archivio" HELP "Codice da cui iniziare la stampa. Vuoto = inizio archivio"
FIELD LF_TABCOM->CODTAB FIELD LF_TABCOM->CODTAB
USE %NOT USE %NOT
INPUT CODTAB F_INIZIO1 INPUT CODTAB F_INIZIO1
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Destinazione@30" S0 DISPLAY "Descrizione@50" S0
DISPLAY "Blocca imm." B0 DISPLAY "Blocca imm." B0
DISPLAY "Documento" B1
OUTPUT F_INIZIO1 CODTAB OUTPUT F_INIZIO1 CODTAB
GROUP 1 GROUP 1
END END
@ -21,8 +20,8 @@ STRING F_FINE1 3
BEGIN BEGIN
PROMPT 2 3 "A codice " PROMPT 2 3 "A codice "
FLAGS "U" FLAGS "U"
HELP "Codice di fine. Vuoto = fine archivio" HELP "Codice di fine. Vuoto = fine archivio"
FIELD LF_TABCOM->CODTAB FIELD LF_TABCOM->CODTAB
COPY USE F_INIZIO1 COPY USE F_INIZIO1
INPUT CODTAB F_FINE1 INPUT CODTAB F_FINE1
COPY DISPLAY F_INIZIO1 COPY DISPLAY F_INIZIO1

View File

@ -1,8 +1,8 @@
// campi maschera batb%not.msk // campi maschera batb%not.msk
#define F_CODICE 101 #define F_NOT_COD 101
#define F_DEST 102 #define F_NOT_DESC 102
#define F_BLOCCA 103 #define F_NOT_BLOCCA 103

View File

@ -1,12 +1,12 @@
[Headers] [Headers]
80 80
Tabella Note cliente Tabella Note cliente
1|@2g%s|Codice 1|@0g%s|Codice
1|@10g%s|Descrizione 1|@35g%s|Descrizione
1|@62g%s|Blocca immissione 1|@63g%s|Blocca immissione
[Rows] [Rows]
1|CODTAB|@2g@2s 1|CODTAB|@0g@2s
1|S0|@10g@50,ls 1|S0+S1|@3g#-75t
1|B0|@62g@2f 1|B0|@79g@1f

View File

@ -8,53 +8,40 @@ ENDPAGE
PAGE "Tabella Note cliente" -1 -1 78 8 PAGE "Tabella Note cliente" -1 -1 78 8
GROUPBOX DLG_NULL 75 7 GROUPBOX DLG_NULL 75 3
BEGIN BEGIN
PROMPT 1 0 "" PROMPT 1 0 ""
FLAGS "R" FLAGS "R"
END END
STRING F_CODICE 2 STRING F_NOT_COD 2
BEGIN BEGIN
PROMPT 4 2 "Codice " PROMPT 3 1 "Codice "
HELP "Codice note del cliente" HELP "Codice note del cliente"
FIELD CODTAB FIELD CODTAB
FLAGS "U" FLAGS "U"
KEY 1 KEY 1
USE %NOT USE %NOT
INPUT CODTAB F_CODICE INPUT CODTAB F_NOT_COD
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Destinazione@50" S0 DISPLAY "Descrizione@50" S0
DISPLAY "Blocca immissione" B0 DISPLAY "Blocca immissione" B0
OUTPUT F_CODICE CODTAB OUTPUT F_NOT_COD CODTAB
OUTPUT F_DEST S0
OUTPUT F_BLOCCA B0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_DEST 50 BOOLEAN F_NOT_BLOCCA
BEGIN BEGIN
PROMPT 4 4 "Descrizione " PROMPT 3 3 "Blocca immissione"
HELP "Descrizione della nota del cliente"
FIELD LF_TABCOM->S0
USE %NOT KEY 2
INPUT S0 F_DEST
DISPLAY "Destinazione@50" S0
DISPLAY "Codice" CODTAB
DISPLAY "Blocca immissione" B0
DISPLAY "Documento" B1
OUTPUT F_CODICE CODTAB
OUTPUT F_DEST S0
OUTPUT F_BLOCCA B0
CHECKTYPE REQUIRED
KEY 2
END
BOOLEAN F_BLOCCA
BEGIN
PROMPT 4 8 "Blocca immissione "
HELP "Indicare se bloccare l'inserimento del documento" HELP "Indicare se bloccare l'inserimento del documento"
FIELD LF_TABCOM->B0 FIELD B0
END
MEMO F_NOT_DESC 75 -2
BEGIN
PROMPT 1 5 "Descrizione"
HELP "Descrizione della nota del cliente"
CHECKTYPE SEARCH
END END
ENDPAGE ENDPAGE

View File

@ -390,7 +390,7 @@ bool TStampa_IVdirettiva::data_limite (TMask_field& f, KEY key)
else else
if ((datalim < in)||(datalim > fin)) if ((datalim < in)||(datalim > fin))
{ {
f.error_box(TR("La data limite non appartiene all' esercizio indicato")); f.error_box(TR("La data limite non appartiene all'esercizio indicato"));
return FALSE; return FALSE;
} }
else else
@ -4681,37 +4681,45 @@ void TStampa_IVdirettiva::setta_righe_descr_verifica(TParagraph_string* str,cons
const char* TStampa_IVdirettiva::descrizione_sezione(char sezione) const char* TStampa_IVdirettiva::descrizione_sezione(char sezione)
{ {
const char sez[2] = { sezione, '\0' }; const char sez[2] = { sezione, '\0' };
tmp = cache().get(TAB_IVD, sez, "S0"); return cache().get(TAB_IVD, sez, "S0");
return tmp;
} }
const char* TStampa_IVdirettiva::descrizione_lettera(char sezione, char lettera) const char* TStampa_IVdirettiva::descrizione_lettera(char sezione, char lettera)
{ {
const char let[3] = { sezione, lettera, '\0' }; const char let[3] = { sezione, lettera, '\0' };
tmp = cache().get(TAB_IVD, let, "S0"); return cache().get(TAB_IVD, let, "S0");
return tmp;
} }
const char* TStampa_IVdirettiva::descrizione_numeroromano(char sezione, char lettera, int numr) const char* TStampa_IVdirettiva::descrizione_numeroromano(char sezione, char lettera, int numr)
{ {
TString8 cod; cod.format("%c%c%04d", sezione, lettera, numr); if (numr > 0)
tmp = cache().get(TAB_IVD, cod, "S0"); {
return tmp; TString8 cod;
cod.format("%c%c%04d", sezione, lettera, numr);
return cache().get(TAB_IVD, cod, "S0");
}
return "";
} }
const char* TStampa_IVdirettiva::descrizione_numero(char sezione, char lettera, int numr, int numero) const char* TStampa_IVdirettiva::descrizione_numero(char sezione, char lettera, int numr, int numero)
{ {
TString8 cod; cod.format("%c%c%04d%02d", sezione, lettera, numr, numero); TString8 cod;
tmp = cache().get(TAB_IVD, cod, "S0"); if (numr > 0)
return tmp; cod.format("%c%c%04d%02d", sezione, lettera, numr, numero);
else
cod.format("%c%c %02d", sezione, lettera, numero);
return cache().get(TAB_IVD, cod, "S0");
} }
const char* TStampa_IVdirettiva::descrizione_sottoconto(int gruppo, int conto, long sottoc) const char* TStampa_IVdirettiva::descrizione_sottoconto(int gruppo, int conto, long sottoc)
{ {
// Cache non strettamente necessaria in quanto i conti vengono letti solo una volta if (gruppo > 0)
TString16 cod; cod.format("%d|%d|%ld", gruppo, conto, sottoc); {
tmp = cache().get(LF_PCON, cod, PCN_DESCR); // Cache non strettamente necessaria in quanto i conti vengono letti solo una volta
return tmp; TString16 cod; cod.format("%d|%d|%ld", gruppo, conto, sottoc);
return cache().get(LF_PCON, cod, PCN_DESCR);
}
return "";
} }
const char* TStampa_IVdirettiva::descr_sottoc_clifo(char tipocf,long s) const char* TStampa_IVdirettiva::descr_sottoc_clifo(char tipocf,long s)

View File

@ -2509,7 +2509,9 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
descr = cgs().row(riga_totale).get(8); descr = cgs().row(riga_totale).get(8);
if (descr.blank()) if (descr.blank())
descr = m.get(F_DESCR); descr = m.get(F_DESCR);
set_cgs_row(riga_totale, real2imp(tot, 'T'), nuovo, descr, 'T'); TImporto imp = real2imp(tot, 'T');
imp.normalize();
set_cgs_row(riga_totale, imp, nuovo, descr, 'T');
} }
calcola_imp(); // Ricalcola totale IVA calcola_imp(); // Ricalcola totale IVA

View File

@ -951,7 +951,7 @@ void TPrimanota_application::write_scadenze(const TMask& m)
const TString8 codcaus = causale().codice(); const TString8 codcaus = causale().codice();
const TValuta cambio(m, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO, SK_CONTROEURO); const TValuta cambio(m, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO, SK_CONTROEURO);
const TString& agente = m.get(FS_AGENTE); const TString& agente = m.get(FS_AGENTE);
const char sezione = get_cgs_imp(0).sezione(); // Dare/Avere const char sezione = causale().sezione(1); //get_cgs_imp(0).sezione(); // Dare/Avere
TBill clifo; TBill clifo;
const int riga_clifo = cerca_conto_cf(clifo); const int riga_clifo = cerca_conto_cf(clifo);
@ -978,7 +978,8 @@ void TPrimanota_application::write_scadenze(const TMask& m)
if (iva() != nessuna_iva) if (iva() != nessuna_iva)
partita.put(PART_PROTIVA, m.get_long(F_PROTIVA)); partita.put(PART_PROTIVA, m.get_long(F_PROTIVA));
const TImporto totdoc = get_cgs_imp(riga_clifo); TImporto totdoc = get_cgs_imp(riga_clifo);
totdoc.normalize(sezione);
partita.put(PART_IMPTOTDOC, totdoc.valore()); partita.put(PART_IMPTOTDOC, totdoc.valore());
cambio.put(partita); cambio.put(partita);
@ -996,7 +997,7 @@ void TPrimanota_application::write_scadenze(const TMask& m)
imponibile_val += pag.tval_rata(i); imponibile_val += pag.tval_rata(i);
imponibile += pag.tlit_rata(i); imponibile += pag.tlit_rata(i);
} }
partita.put(PART_IMPORTO, imponibile); partita.put(PART_IMPORTO, imponibile);
partita.put(PART_IMPORTOVAL, imponibile_val); partita.put(PART_IMPORTOVAL, imponibile_val);
partita.put(PART_SPESE, pag.spese()); partita.put(PART_SPESE, pag.spese());

View File

@ -77,10 +77,10 @@ const TContoOccas& TContoOccas::set(int g, int c, long s, char t, const char* oc
const TString& TContoOccas::descrizione() const TString& TContoOccas::descrizione()
{ {
if (_occfpi.not_empty()) if (tipo() > ' ' && _occfpi.not_empty())
{ {
TString16 code; code << tipo() << '|' << sottoconto(); TString16 code; code << tipo() << '|' << sottoconto();
bool really_occas = cache().get(LF_CLIFO, code, CLI_OCCAS).not_empty(); const bool really_occas = cache().get(LF_CLIFO, code, CLI_OCCAS).not_empty();
if (really_occas) if (really_occas)
return cache().get(LF_OCCAS, _occfpi, "RAGSOC"); return cache().get(LF_OCCAS, _occfpi, "RAGSOC");
} }
@ -500,7 +500,7 @@ void TStampa_giornale::preprocess_footer()
riga.format ("@b@%dg%s@%dg%c %s @%dg%c @%dg%s", riga.format ("@b@%dg%s@%dg%c %s @%dg%c @%dg%s",
_stampa_width == 132 ? SCRITTA : DARE198-STUMB, _stampa_width == 132 ? SCRITTA : DARE198-STUMB,
TR("A riportare "), TR("A riportare "),
_stampa_width == 132 ? TOTDARE132 : DARE198, _stampa_width == 132 ? TOTDARE132 : DARE198-2,
'D', 'D',
(const char *) dts, (const char *) dts,
_stampa_width == 132 ? SEZA132 : AVERE198-2, _stampa_width == 132 ? SEZA132 : AVERE198-2,
@ -1092,7 +1092,11 @@ void TStampa_giornale::set_rows (int file, int counter)
if (s != 0L) if (s != 0L)
set_row (r, "%06ld", s); set_row (r, "%06ld", s);
_tc.set(g,c,s,cf,_occfpi); if (cf > ' ' && _occfpi.not_empty() && s == _cur->curr(LF_MOV).get_long(MOV_CODCF))
_tc.set(g,c,s,cf,_occfpi);
else
_tc.set(g,c,s,cf,"");
TParagraph_string descr_conto("", 198); TParagraph_string descr_conto("", 198);
if (_stampa_width == 132) if (_stampa_width == 132)

View File

@ -111,6 +111,10 @@ bool TApertura_chiusura::mask_datac(TMask_field& f, KEY k)
{ {
TDate data = f.get(); TDate data = f.get();
int anno = app()._esc->date2esc(data); int anno = app()._esc->date2esc(data);
const int annoap = f.mask().get_int(F_ANNO);
if (anno == annoap)
anno = app()._esc->pred(annoap);
f.mask().set(F_ANNOCH, anno); // Esercizio di chiusura f.mask().set(F_ANNOCH, anno); // Esercizio di chiusura
if (anno == 0) if (anno == 0)

View File

@ -4,6 +4,7 @@
// Aggiornamento saldi // Aggiornamento saldi
// //
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#include <diction.h> #include <diction.h>
#include <progind.h> #include <progind.h>
#include <relation.h> #include <relation.h>

View File

@ -830,7 +830,7 @@ void TPag_per_cms::scan_pags()
if (acodfor >= acodfor) if (acodfor >= acodfor)
arec.put(PART_SOTTOCONTO, acodfor); arec.put(PART_SOTTOCONTO, acodfor);
TString filtro = "(TIPOPAG>=\"3\")"; //deve essere un pagamento a fornitore!!! TString filtro = "(TIPOMOV>=\"3\")"; //deve essere un pagamento a fornitore!!!
const TDate dataini = _mask->get(F_DATAINI); const TDate dataini = _mask->get(F_DATAINI);
const TDate datafin = _mask->get(F_DATAFIN); const TDate datafin = _mask->get(F_DATAFIN);
if (dataini.ok()) if (dataini.ok())

View File

@ -1,7 +1,4 @@
#include <config.h>
#include <currency.h>
#include <printapp.h> #include <printapp.h>
#include <recarray.h>
#include "../cg/cgsaldac.h" #include "../cg/cgsaldac.h"
#include "sc2.h" #include "sc2.h"
@ -638,25 +635,25 @@ bool TStampaScadenzario::preprocess_page(int file, int counter)
_altri=""; _altri="";
_imp_pag = ""; _imp_pag = "";
const bool print_in_valuta = _stvaluta && _codval != " "; const bool print_in_valuta = _stvaluta && is_true_value(_codval);
print_real(_imp_scad, imp_scad, print_in_valuta ? _codval : "_FIRM"); print_real(_imp_scad, imp_scad, print_in_valuta ? _codval : EMPTY_STRING);
if (_w_imp_pag != ZERO) if (_w_imp_pag != ZERO)
print_real(_imp_pag, _w_imp_pag, print_in_valuta ? _codval : "_FIRM"); print_real(_imp_pag, _w_imp_pag, print_in_valuta ? _codval : EMPTY_STRING);
if (_w_imp_res != ZERO) if (_w_imp_res != 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 : "_FIRM"); 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 : "_FIRM"); print_real(_riba, _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 : "_FIRM"); print_real(_altri, _w_imp_res, print_in_valuta ? _codval : EMPTY_STRING);
break; break;
} }
} }
@ -675,13 +672,16 @@ bool TStampaScadenzario::preprocess_page(int file, int counter)
(file == LF_PCON && _tipost == altri) || (file == LF_PCON && _tipost == altri) ||
(file ==LF_CLIFO && (_tipost == clienti || _tipost == fornitori))) (file ==LF_CLIFO && (_tipost == clienti || _tipost == fornitori)))
{ {
if (_cur_data != botime && _cur_data != datascad) bool date_changed = false;
if (_cur_data.ok())
date_changed = _cur_data != datascad;
if (date_changed)
{ {
// Se la data di scadenza e' cambiata e non e' il primo record della relazione // Se la data di scadenza e' cambiata e non e' il primo record della relazione
// allora stampa i totali del giorno. // allora stampa i totali del giorno.
// Controlla poi se e' cambiato il mese, in caso affermativo stampa anche i // Controlla poi se e' cambiato il mese, in caso affermativo stampa anche i
// totali del mese e lo schema riepilogativo mensile // totali del mese e lo schema riepilogativo mensile
bool month_changed = _cur_data.month() != datascad.month(); const bool month_changed = _cur_data.month() != datascad.month();
for (int i=1; i<MaxRowsForTotal; i++) reset_row(i); for (int i=1; i<MaxRowsForTotal; i++) reset_row(i);
int n = 1; int n = 1;
@ -1095,7 +1095,7 @@ bool TStampaScadenzario::set_print(int)
TSorted_cursor* sorcur = (TSorted_cursor*)current_cursor(); TSorted_cursor* sorcur = (TSorted_cursor*)current_cursor();
TToken_string sortexpr = sorcur->get_order(); TToken_string sortexpr = sorcur->get_order();
const bool has_ban = sortexpr.get(0) == SCAD_CODABIPR; const bool has_ban = sortexpr.starts_with(SCAD_CODABIPR);
if (_group_ban != has_ban) if (_group_ban != has_ban)
{ {
if (_group_ban) if (_group_ban)
@ -1345,24 +1345,26 @@ void TStampaScadenzario::print_riepilogo(int &nriga, bool type)
set_row(nriga++,"@0g! %s@82g!",itom(_cur_data.month())); set_row(nriga++,"@0g! %s@82g!",itom(_cur_data.month()));
set_row(nriga++,"%s",(const char*)s); set_row(nriga++,"%s",(const char*)s);
} }
} else }
{ else
set_row(nriga,FR("!@5gTotali dal %s al "),_datai.string(brief)); {
set_row(nriga++,"%s@82g!",_dataf.string(brief)); set_row(nriga,FR("!@5gTotali dal %s al "),_datai.string(brief));
set_row(nriga++,"%s",(const char *)s); set_row(nriga++,"%s@82g!",_dataf.string(brief));
} set_row(nriga++,"%s",(const char *)s);
}
print_rows_riepilogo(nriga, type, totali); print_rows_riepilogo(nriga, type, totali);
totali.get_keys(as); totali.get_keys(as);
as.sort(); as.sort();
const int items = totali.items(); const int items = totali.items();
TString val, value;
for (int i=0; i < items; i++) for (int i=0; i < items; i++)
{ {
TString val(as.row(i)); val = as.row(i);
TString value; const bool stampa_in_valuta = _stvaluta && is_true_value(val);
const bool stampa_in_valuta = _stvaluta && val != " "; const real& tot = (real&)totali[val];
real& tot = (real&)totali[val];
print_real(value, tot, stampa_in_valuta ? val : "_FIRM"); print_real(value, tot, stampa_in_valuta ? val : EMPTY_STRING);
if (tot != ZERO) if (tot != ZERO)
{ {
@ -1372,7 +1374,8 @@ void TStampaScadenzario::print_riepilogo(int &nriga, bool type)
} }
else else
{ {
if (val.blank()) val = "EUR"; if (!is_true_value(val))
val = TCurrency::get_firm_val();
set_row(nriga++,FR("! Partite pareggiate in %s. @82g!"),(const char*) val); set_row(nriga++,FR("! Partite pareggiate in %s. @82g!"),(const char*) val);
} }
} }
@ -1402,37 +1405,41 @@ void TStampaScadenzario::print_rows_totali(int &nriga, tipo_pe p)
const int items = xassoc.items(); const int items = xassoc.items();
xassoc.get_keys(as); xassoc.get_keys(as);
as.sort(); as.sort();
TString k, value;
for (int i=0; i < items; i++) for (int i=0; i < items; i++)
{ {
TString k(as.row(i)); // Chiave di ordinamento(valuta) k = as.row(i); // Chiave di ordinamento(valuta)
TString value; const bool stampa_in_valuta = _stvaluta && is_true_value(k);
const bool stampa_in_valuta = _stvaluta && k != " ";
_LinearTotal& v = (_LinearTotal&)xassoc[k]; _LinearTotal& v = (_LinearTotal&)xassoc[k];
if (k != " ") if (is_true_value(k))
set_row(nriga,"@97g%3s",(const char*)k); set_row(nriga,"@97g%3s",(const char*)k);
print_real(value, v._is, stampa_in_valuta ? k : "_FIRM"); if (!stampa_in_valuta)
k.cut(0);
print_real(value, v._is, k);
if (v._is != ZERO) if (v._is != ZERO)
set_row(nriga,"@101g%18s",(const char*) value); set_row(nriga,"@101g%18s",(const char*) value);
print_real(value, v._ip, stampa_in_valuta ? k : "_FIRM"); print_real(value, v._ip, k);
if (v._ip != ZERO) if (v._ip != ZERO)
set_row(nriga,"@120g%18s",(const char*) value); set_row(nriga,"@120g%18s",(const char*) value);
print_real(value, v._rd, stampa_in_valuta ? k : "_FIRM"); print_real(value, v._rd, k);
if (v._rd != ZERO) if (v._rd != ZERO)
set_row(nriga,"@139g%18s",(const char*) value); set_row(nriga,"@139g%18s",(const char*) value);
print_real(value, v._ri, stampa_in_valuta ? k : "_FIRM"); print_real(value, v._ri, k);
if (v._ri != ZERO) if (v._ri != ZERO)
set_row(nriga,"@158g%18s",(const char*) value); set_row(nriga,"@158g%18s",(const char*) value);
print_real(value, v._al, stampa_in_valuta ? k : "_FIRM"); print_real(value, v._al, k);
if (v._al != ZERO) if (v._al != ZERO)
set_row(nriga,"@177g%18s",(const char*) value); set_row(nriga,"@177g%18s",(const char*) value);
@ -1452,7 +1459,8 @@ void TStampaScadenzario::print_totali(int &nriga, bool month_changed, bool ended
{ {
set_row(nriga,FR("@36g** TOTALI DI @51g%s"),itom(_cur_data.month())); set_row(nriga,FR("@36g** TOTALI DI @51g%s"),itom(_cur_data.month()));
print_rows_totali(nriga, monthly); print_rows_totali(nriga, monthly);
if (_striepilogo) print_riepilogo(nriga,FALSE); if (_striepilogo)
print_riepilogo(nriga,FALSE);
} }
if (ended) if (ended)
{ {
@ -1502,13 +1510,29 @@ void TStampaScadenzario::print_totali_bank(int &nriga)
// Setta le righe per stampare i totali della banca // Setta le righe per stampare i totali della banca
// Ordinamento primario per codice o ragione sociale! // Ordinamento primario per codice o ragione sociale!
{ {
set_row(nriga++, ""); if (!real::is_null(_last_ban))
if (_ordata) {
set_row(nriga,FR("@36g** TOTALI BANCA")); if (_ordata) // Errore 158 - Non stampa il totale del giorno se cambia solo la banca e non il giorno
else {
set_row(nriga,FR("@70g** TOTALE BANCA")); const TRectype &rc = current_cursor()->curr(LF_SCADENZE);
print_rows_totali(nriga, bank); const TDate datascad = rc.get(SCAD_DATASCAD);
_totbank_printed = TRUE; if (datascad == _cur_data) // Non e' cambiato il giorno
{
nriga++; // Salto una riga
print_totali(nriga, true, false); // Stampa totali del giorno e del mese
((TAssoc_array&)_tl[0]).destroy(); // Azzera totali del giorno
((TAssoc_array&)_tl[1]).destroy(); // Azzera totali del mese
}
}
nriga++;
if (_ordata)
set_row(nriga,FR("@36g** TOTALI BANCA"));
else
set_row(nriga,FR("@70g** TOTALE BANCA"));
print_rows_totali(nriga, bank);
_totbank_printed = true;
}
} }
void TStampaScadenzario::print_intestazione_banca(int &nriga) void TStampaScadenzario::print_intestazione_banca(int &nriga)
@ -1518,7 +1542,7 @@ void TStampaScadenzario::print_intestazione_banca(int &nriga)
const TString8 cab = rc.get(SCAD_CODCABPR); const TString8 cab = rc.get(SCAD_CODCABPR);
TString16 curr_ban; curr_ban << abi << cab; TString16 curr_ban; curr_ban << abi << cab;
bool print_bank = FALSE; bool print_bank = false;
if (curr_ban != _last_ban) if (curr_ban != _last_ban)
{ {
_last_ban = curr_ban; _last_ban = curr_ban;
@ -1532,7 +1556,7 @@ void TStampaScadenzario::print_intestazione_banca(int &nriga)
else else
_desc_ban = FR("NON INDICATA"); _desc_ban = FR("NON INDICATA");
_last_bank_rec = current_cursor()->pos(); _last_bank_rec = current_cursor()->pos();
print_bank = TRUE; print_bank = true;
} }
else else
{ {

View File

@ -165,6 +165,7 @@ bool TMotore_application::changing_mask( int mode )
TMask* TMotore_application::get_mask( int mode ) TMask* TMotore_application::get_mask( int mode )
{ {
/*
switch ( mode ) switch ( mode )
{ {
case MODE_INS: case MODE_INS:
@ -185,6 +186,22 @@ TMask* TMotore_application::get_mask( int mode )
return _msk; return _msk;
break; break;
} }
*/
if (mode != MODE_INS && mode != MODE_MOD)
return _msk;
TString4 tipodoc = _msk->get(F_TIPODOC); // Prendo il tipo documento dalla maschera di query;
if (mode == MODE_MOD)
tipodoc = get_relation()->curr().get(DOC_TIPODOC); // Lo prendo dalla relazione (Gelai)
_docmsk = (TDocumento_mask*)_doc_masks.objptr(tipodoc);
if (_docmsk == NULL)
{
_docmsk = new TDocumento_mask(tipodoc);
_doc_masks.add(tipodoc, _docmsk);
}
return _docmsk;
} }
const char* TMotore_application::get_next_key( ) const char* TMotore_application::get_next_key( )

View File

@ -36,8 +36,8 @@ class TStampa_condizioni_vendita: public TPrint_application {
bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi
bool _filter_by_grm; //Filtro per gruppo merceologico nel caso di stampa righe articoli bool _filter_by_grm; //Filtro per gruppo merceologico nel caso di stampa righe articoli
TString _codiva, _um, _descragg; TString _codiva, _um, _descragg;
TString _strprezzo, _stromaggio; //stringhe per la stampa del prezzo dell'articolo (normale ed omaggiato) TString _strprezzo, _stromaggio, _strstorico; //stringhe per la stampa del prezzo dell'articolo (normale, omaggiato e storico!)
//int _rcondv_link_id; // id del link ipertestuale all'anagrafica di magazzino
protected: protected:
static bool tipo_handler(TMask_field& f, KEY k); static bool tipo_handler(TMask_field& f, KEY k);
virtual bool user_create(void); virtual bool user_create(void);
@ -381,7 +381,7 @@ void TStampa_condizioni_vendita::preprocess_header() {
if (_condven=="O") if (_condven=="O")
set_header(i, "@73gEsaur."); // setta l'header dell'articolo in esaurimento set_header(i, "@73gEsaur."); // setta l'header dell'articolo in esaurimento
if (_condven=="C" && _printstorico) //header della riga prezii e date storici if (_condven=="C" && _printstorico) //header della riga prezii e date storici
set_header(++i, "@87gData prezzo storico @109gPrezzo storico"); set_header(++i, "@79gData prezzo storico @101gPrezzo storico");
} }
set_header(++i,(const char*)rw); set_header(++i,(const char*)rw);
set_header(++i, "@14g%3s", (const char *) condv.get("COD")); set_header(++i, "@14g%3s", (const char *) condv.get("COD"));
@ -504,14 +504,16 @@ void TStampa_condizioni_vendita::set_page(int file, int) {
set_row(++i, "Prezzo: #t", &_strprezzo); set_row(++i, "Prezzo: #t", &_strprezzo);
if (_printstorico && tiporiga[0] == 'A') if (_printstorico && tiporiga[0] == 'A')
set_row(++i, "Prezzo storico: @pn", FLD(LF_RCONDV, "PRZSTO", "###.###.###,@@")); {
curr2str("PRZSTO", _strstorico);
set_row(++i, "Prezzo storico: #t", &_strstorico);
}
set_row(++i, "Pz per conf.: @pn", FLD(-ART1, "PPCONF","###.###.###,@@")); set_row(++i, "Pz per conf.: @pn", FLD(-ART1, "PPCONF","###.###.###,@@"));
set_row(++i, "Data ultimo aumento: @d", FLD(LF_RCONDV, "DATAULTAUM")); set_row(++i, "Data ultimo aumento: @d", FLD(LF_RCONDV, "DATAULTAUM"));
if (_printstorico && tiporiga[0] == 'A') if (_printstorico && tiporiga[0] == 'A')
set_row(++i, "Data prezzo storico: @d", FLD(LF_RCONDV, "DATAPRZSTO")); set_row(++i, "Data prezzo storico: @d", FLD(LF_RCONDV, "DATAPRZSTO"));
set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO")); set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO"));
set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA")); set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA"));
//set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA"));
set_row(++i, "Codice IVA: #4t", &_codiva); set_row(++i, "Codice IVA: #4t", &_codiva);
set_row(++i, "Percentuale di provvigione: @pn", FLD(LF_RCONDV, "PERCPROVV","###,@@")); set_row(++i, "Percentuale di provvigione: @pn", FLD(LF_RCONDV, "PERCPROVV","###,@@"));
if (condv.get_bool("GESTSCO")) { if (condv.get_bool("GESTSCO")) {
@ -584,7 +586,8 @@ void TStampa_condizioni_vendita::set_page(int file, int) {
// quarta riga: storico (solo per contratti,opzionale) // quarta riga: storico (solo per contratti,opzionale)
if (_printstorico) if (_printstorico)
{ {
set_row(++i, "@87g@10s @109g@pn", FLD(LF_RCONDV, "DATAPRZSTO"), FLD(LF_RCONDV, "PRZSTO", "###.###.###,@@")); curr2str("PRZSTO", _strstorico);
set_row(++i, "@79g@10s @101g#t", FLD(LF_RCONDV, "DATAPRZSTO"), &_strstorico);
} }
set_row(++i, ""); // salta una riga set_row(++i, ""); // salta una riga

View File

@ -136,26 +136,6 @@ public:
virtual ~TSpesa_prest() {} virtual ~TSpesa_prest() {}
}; };
/*class TIVA : public TRectype // velib01
{
protected:
int read(const char* codice);
public:
TObject* dup() const { return new TIVA(codice()); }
public:
const TString& codice() const { return get("CODTAB");}
const TString& descrizione() const { return get("S0"); }
const real aliquota() const { return get_real("R0"); }
const TString& tipo() const { return get("S1"); }
TIVA(const char* codice = NULL);
TIVA(const TRectype& rec);
virtual ~TIVA() {}
};*/
class TExpr_documento : public TExpression // velib01 class TExpr_documento : public TExpression // velib01
{ {
TDocumento * _doc; TDocumento * _doc;
@ -425,6 +405,7 @@ class TRiga_documento : public TAuto_variable_rectype // velib02
static TAssoc_array _ive; static TAssoc_array _ive;
static TCache_articoli * _articoli; static TCache_articoli * _articoli;
static int _iva_calc_mode; static int _iva_calc_mode;
static bool _rit_calc;
protected: protected:
// @cmember Setta il contenuto del campo <p fieldname> (non tipizzata) // @cmember Setta il contenuto del campo <p fieldname> (non tipizzata)
@ -501,6 +482,7 @@ public:
real iva_omaggio(int ndec, int iva_calc_mode = 1) const; real iva_omaggio(int ndec, int iva_calc_mode = 1) const;
real imposta(bool round = TRUE) const; real imposta(bool round = TRUE) const;
real provvigione(int ndec = AUTO_DECIMALS) const; real provvigione(int ndec = AUTO_DECIMALS) const;
real ritenuta(const char tipor = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const;
const TString& field_qta() const; const TString& field_qta() const;
const TString& field_qtaevasa() const; const TString& field_qtaevasa() const;
@ -708,7 +690,7 @@ public:
void set_riga_esenzione(); void set_riga_esenzione();
void iva_esente(TString & codiva_es) const; void iva_esente(TString & codiva_es) const;
real spese_incasso(real & imp, int ndec, TTipo_importo netto = _lordo) const ; real spese_incasso(int ndec, TTipo_importo netto = _lordo) const ;
real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ; real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ;
real imponibile(bool spese = FALSE, int ndec = AUTO_DECIMALS) const; real imponibile(bool spese = FALSE, int ndec = AUTO_DECIMALS) const;
@ -717,6 +699,7 @@ public:
real totale_netto() const; real totale_netto() const;
real basesconto() const; real basesconto() const;
real spese() const; real spese() const;
real ritenute(const char tipo = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const;
real provvigione(int ndec = AUTO_DECIMALS) const; real provvigione(int ndec = AUTO_DECIMALS) const;
real valore(bool totale, int ndec = AUTO_DECIMALS) const; real valore(bool totale, int ndec = AUTO_DECIMALS) const;
@ -726,7 +709,7 @@ public:
real calc_conai_qta(int type); real calc_conai_qta(int type);
void update_conai(); void update_conai();
bool is_generic() const { return tipo_valido() && tipo().is_generic(); } bool is_generic() const { return tipo_valido() && tipo().is_generic(); }
bool is_fattura() const { return tipo_valido() && tipo().is_fattura(); } bool is_fattura() const { return tipo_valido() && tipo().is_fattura(); }
bool is_bolla() const { return tipo_valido() && tipo().is_bolla(); } bool is_bolla() const { return tipo_valido() && tipo().is_bolla(); }
bool is_ordine() const { return tipo_valido() && tipo().is_ordine(); } bool is_ordine() const { return tipo_valido() && tipo().is_ordine(); }

View File

@ -167,7 +167,8 @@ TAssoc_array TRiga_documento::_ive;
TCache_articoli * TRiga_documento::_articoli = NULL; TCache_articoli * TRiga_documento::_articoli = NULL;
// 0=ignora IVA; 1=consedera iva solo se c'e' addebito; 2=considera sempre IVA // 0=ignora IVA; 1=consedera iva solo se c'e' addebito; 2=considera sempre IVA
int TRiga_documento::_iva_calc_mode = 0; int TRiga_documento::_iva_calc_mode = 0;
bool TRiga_documento::_rit_calc = false;
TRiga_documento::TRiga_documento(TDocumento* doc, const char * tipo) TRiga_documento::TRiga_documento(TDocumento* doc, const char * tipo)
: TAuto_variable_rectype(LF_RIGHEDOC), _doc(doc) : TAuto_variable_rectype(LF_RIGHEDOC), _doc(doc)
@ -451,7 +452,7 @@ real TRiga_documento::importo(bool scontato, bool lordo, int ndec) const
case RIGA_SPESEDOC: case RIGA_SPESEDOC:
{ {
const TSpesa_prest & s = spesa(); const TSpesa_prest & s = spesa();
const bool to_calc = s.tipo_ritenuta() == '\0'; const bool to_calc = _rit_calc || s.tipo_ritenuta() == '\0';
if (to_calc) if (to_calc)
{ {
@ -615,6 +616,24 @@ real TRiga_documento::provvigione(int ndec) const
return val; return val;
} }
real TRiga_documento::ritenuta(const char tipor, bool lordo, int ndec) const
{
real val;
if (tipo().tipo() == RIGA_SPESEDOC)
{
const char tipo_rit = spesa().tipo_ritenuta();
if ((tipor != '\0' && tipo_rit == tipor) || (tipor == '\0' && tipo_rit != '\0'))
{
_rit_calc = TRUE;
val = importo(true, lordo, ndec);
_rit_calc = FALSE;
}
}
return val;
}
const TString& TRiga_documento::field_qta() const const TString& TRiga_documento::field_qta() const
{ {
const TString& rowtype_field = tipo().field_qta(); const TString& rowtype_field = tipo().field_qta();

View File

@ -268,7 +268,7 @@ void TDocumento::test_firm()
} }
} }
real TDocumento::spese_incasso(real& /* imp */, int ndec, TTipo_importo t) const real TDocumento::spese_incasso(int ndec, TTipo_importo t) const
{ {
real imp_spese; real imp_spese;
const real percentuale = get_real("PERCSPINC"); const real percentuale = get_real("PERCSPINC");
@ -394,6 +394,9 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
spese_val.change_to_firm_val(); spese_val.change_to_firm_val();
const real sp_orig = spese_val.get_num(); const real sp_orig = spese_val.get_num();
bool estero = FALSE; // Assumiamo per ora non estero bool estero = FALSE; // Assumiamo per ora non estero
TString16 codiva_es;
iva_esente(codiva_es);
for (int j = 0; j < 5 && tot_bolli+iva_bolli != old_bolli; j++) for (int j = 0; j < 5 && tot_bolli+iva_bolli != old_bolli; j++)
{ {
@ -475,7 +478,7 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
break; break;
} }
} }
iva_bolli = TRiga_documento::iva(codiva_bolli()).imposta(tot_bolli, ndec); iva_bolli = TRiga_documento::iva(codiva_es.not_empty() ? (const TString &) codiva_es : codiva_bolli()).imposta(tot_bolli, ndec);
importo += (tot_bolli + iva_bolli - old_bolli); importo += (tot_bolli + iva_bolli - old_bolli);
} }
if (t == _lordo) if (t == _lordo)
@ -1761,7 +1764,7 @@ void TDocumento::update_tabella_iva()
if (fatt_comm) if (fatt_comm)
calc_iva_fattura_commerciale(); calc_iva_fattura_commerciale();
real val = spese_incasso(tot_doc, ALL_DECIMALS, doc_al_lordo ? _lordo : _netto); real val = spese_incasso(ALL_DECIMALS, doc_al_lordo ? _lordo : _netto);
if (val != ZERO) if (val != ZERO)
{ {
@ -1778,32 +1781,32 @@ void TDocumento::update_tabella_iva()
if (!doc_al_lordo) if (!doc_al_lordo)
{ {
val = spese_incasso(tot_doc, ALL_DECIMALS, _imposta); val = spese_incasso(ALL_DECIMALS, _imposta);
ri->iva_spese() += val; ri->iva_spese() += val;
tot_doc += val; tot_doc += val;
} }
} }
val = bolli(tot_doc, ALL_DECIMALS, doc_al_lordo ? _lordo : _netto); const real rit = ritenute();
val = bolli(real(tot_doc - rit), ALL_DECIMALS, doc_al_lordo ? _lordo : _netto);
if (val != ZERO) if (val != ZERO)
{ {
const TString16 codiva = codiva_bolli(); const TString16 codiva = codiva_bolli();
TRiepilogo_iva* ri = (TRiepilogo_iva *) table.objptr(codiva); TRiepilogo_iva* ri = (TRiepilogo_iva *) table.objptr(codiva);
if (ri == NULL) if (ri == NULL)
{ {
ri = new TRiepilogo_iva(TCodiceIVA(codiva)); ri = new TRiepilogo_iva(TCodiceIVA(codiva));
table.add(codiva, ri); table.add(codiva, ri);
} }
ri->imp_spese() += val;
tot_doc += val;
if (!doc_al_lordo) if (!doc_al_lordo)
{ {
val = bolli(tot_doc, ALL_DECIMALS, _imposta); real valiva = bolli(real(tot_doc - rit), ALL_DECIMALS, _imposta);
ri->iva_spese() += val; ri->iva_spese() += valiva;
tot_doc += val; tot_doc += valiva;
} }
ri->imp_spese() += val;
tot_doc += val;
} }
// SCORPORO // SCORPORO
@ -1865,8 +1868,8 @@ real TDocumento::totale_doc() const
real r = imponibile() + imposta(); real r = imponibile() + imposta();
const int ndec = decimals(); const int ndec = decimals();
r += spese_incasso(r, ndec); r += spese_incasso(ndec);
r += bolli(r, ndec); r += bolli(real(r - ritenute()), ndec);
return r; return r;
} }
} }
@ -1899,6 +1902,18 @@ real TDocumento::spese() const
return ZERO; return ZERO;
} }
real TDocumento::ritenute(const char tipo, bool lordo, int ndec) const
{
real val;
for (int i = rows() ; i > 0; i--)
{
TRiga_documento &r = ((TRiga_documento &) ((TDocumento *)this)->row(i));
val += r.ritenuta(tipo, lordo, ndec);
}
return val;
}
TPagamento& TDocumento::pagamento() TPagamento& TDocumento::pagamento()
{ {
const char tipocf = get_char(DOC_TIPOCF); const char tipocf = get_char(DOC_TIPOCF);

View File

@ -444,7 +444,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
real & r = stack.peek_real(); real & r = stack.peek_real();
if (_doc) if (_doc)
r = _doc->spese_incasso(r, ndec, netto ? _netto : _lordo); r = _doc->spese_incasso(ndec, netto ? _netto : _lordo);
else else
r = ZERO; r = ZERO;
} }
@ -463,8 +463,8 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
if (_doc) if (_doc)
{ {
r += _doc->spese_incasso(r, ndec); r += _doc->spese_incasso(ndec);
r = _doc->bolli(r, ndec, netto ? _netto : _lordo); r = _doc->bolli(real(r - _doc->ritenute()), ndec, netto ? _netto : _lordo);
} }
else else
r = ZERO; r = ZERO;
@ -481,9 +481,9 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
if (_doc) if (_doc)
{ {
real r1 = _doc->spese_incasso(r, ndec); real r1 = _doc->spese_incasso(ndec);
r += r1; r += r1;
r1 += _doc->bolli(r, ndec); r1 += _doc->bolli(real(r - _doc->ritenute()), ndec);
r = r1; r = r1;
} }
else else
@ -728,25 +728,9 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
stack.push(ZERO); stack.push(ZERO);
real & val = stack.peek_real(); real & val = stack.peek_real();
const bool spesa = _row->tipo().tipo() == 'S'; const char tipo = _row->spesa().tipo_ritenuta();
if (spesa) val = _row->ritenuta(tipo, lordo, ndec);
{
const bool tipo_rit = _row->spesa().tipo_ritenuta() != 0;
if (tipo_rit != '\0')
{
((TSpesa_prest &)_row->spesa()).zero("S9");
_row->dirty_fields();
val = _row->importo(TRUE, lordo, ndec);
_row->dirty_fields();
((TSpesa_prest &)_row->spesa()).put("S9", (char)tipo_rit);
}
else
val = ZERO;
}
else
val = ZERO;
} }
break; break;
case _tipo_ritenuta: case _tipo_ritenuta:

View File

@ -1811,6 +1811,8 @@ void TContabilizzazione::calculate_spese(real& spese, real& sp_iva, int ndec, bo
r.put(RDOC_PREZZO, spese); r.put(RDOC_PREZZO, spese);
r.put(RDOC_CODIVA, codiva_es); r.put(RDOC_CODIVA, codiva_es);
_righe_iva->add(r, zio, ndec); _righe_iva->add(r, zio, ndec);
sp_iva = r.imposta(FALSE);
sp_iva.round(ndec);
if (doc.tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale sono esclusivi. if (doc.tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale sono esclusivi.
{ {
// Totalizza per ogni codice iva il lordo // Totalizza per ogni codice iva il lordo
@ -1818,9 +1820,7 @@ void TContabilizzazione::calculate_spese(real& spese, real& sp_iva, int ndec, bo
if (!_totali_lordi.is_key(codiva_es)) if (!_totali_lordi.is_key(codiva_es))
_totali_lordi.add(codiva_es, new real); _totali_lordi.add(codiva_es, new real);
real& rl = (real&) _totali_lordi[codiva_es]; real& rl = (real&) _totali_lordi[codiva_es];
real iva = r.imposta(FALSE); rl += spese + sp_iva;
iva.round(ndec);
rl += spese + iva;
} }
} }
else else
@ -1832,20 +1832,23 @@ error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
{ {
real tot_netto, sp_incasso, sp_bolli; real tot_netto, sp_incasso, sp_bolli;
real iva_sp_incasso, iva_sp_bolli; real iva_sp_incasso, iva_sp_bolli;
const real rit = doc.ritenute();
bool is_cli = doc.get(DOC_TIPOCF) == "C"; bool is_cli = doc.get(DOC_TIPOCF) == "C";
// Aggiunge le spese d'incasso // Aggiunge le spese d'incasso
tot_netto = doc.totale_netto(); tot_netto = doc.totale_netto();
sp_incasso = doc.spese_incasso(tot_netto,ndec,_netto); sp_incasso = doc.spese_incasso(ndec, _netto);
TString16 codiva_es;
doc.iva_esente(codiva_es);
if (sp_incasso != 0.0) if (sp_incasso != 0.0)
calculate_spese(sp_incasso,iva_sp_incasso,ndec,TRUE,is_cli, doc.codiva_spese(), doc); calculate_spese(sp_incasso,iva_sp_incasso,ndec,TRUE,is_cli, codiva_es.not_empty() ? codiva_es : doc.codiva_spese(), doc);
// Aggiunge le spese bolli // Aggiunge le spese bolli
tot_netto += sp_incasso + iva_sp_incasso; tot_netto += sp_incasso + iva_sp_incasso - rit;
sp_bolli = doc.bolli(tot_netto,ndec, _netto); sp_bolli = doc.bolli(tot_netto, ndec, _netto);
if (sp_bolli != 0) if (sp_bolli != 0)
calculate_spese(sp_bolli, iva_sp_bolli, ndec, FALSE, is_cli, doc.codiva_bolli(), doc); calculate_spese(sp_bolli, iva_sp_bolli, ndec, FALSE, is_cli, codiva_es.not_empty() ? codiva_es : doc.codiva_bolli(), doc);
return _error; return _error;
} }
@ -2216,7 +2219,16 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
const bool riga_omaggio = r.get_bool(RDOC_ADDIVA) && tipo == 'O'; const bool riga_omaggio = r.get_bool(RDOC_ADDIVA) && tipo == 'O';
if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI) || riga_omaggio) if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI) || riga_omaggio)
{ {
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro const bool spesa = r.tipo().tipo() == RIGA_SPESEDOC;
char tipo_rit = '\0';
if (spesa)
tipo_rit = r.spesa().tipo_ritenuta();
const bool ritenuta = tipo_rit != '\0' && !_caus->intra();
if (!ritenuta)
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
if (good()) if (good())
{ {
if (fat_com) if (fat_com)
@ -2238,57 +2250,49 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
r.put(RDOC_CODIVA, codiva2); //Restore r.put(RDOC_CODIVA, codiva2); //Restore
} }
else else
{ if (ritenuta)
if (riga_omaggio) {
_righe_iva->add_omaggi(r, conto); TCurrency_documento c(r.ritenuta(tipo_rit));
else TRectype & h = _movimento->lfile().curr();
_righe_iva->add(r, conto); real val;
const TString16 cod(r.get(RDOC_CODIVA)); if (r.doc().in_valuta())
{
val = h.get_real(MOV_TOTDOCVAL) - c.get_num();
h.put(MOV_TOTDOCVAL, val);
}
c.change_to_firm_val();
val = h.get_real(MOV_TOTDOC) - c.get_num();
h.put(MOV_TOTDOC, val);
if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi. if (tipo_rit == 'F')
{ {
// Totalizza per ogni codice iva il lordo val = h.get_real(MOV_RITFIS) + c.get_num();
if (!_totali_lordi.is_key(cod)) h.put(MOV_RITFIS, val);
_totali_lordi.add(cod, new real); }
real& rl = (real&) _totali_lordi[cod]; else
rl += r.imponibile(TRUE); if (tipo_rit == 'S')
} {
} val = h.get_real(MOV_RITSOC) + c.get_num();
if (r.tipo().tipo() == RIGA_SPESEDOC && !_caus->intra()) h.put(MOV_RITSOC, val);
{ }
const char tipo_rit = r.spesa().tipo_ritenuta(); }
else
if (tipo_rit != '\0') {
{ if (riga_omaggio)
((TSpesa_prest &)r.spesa()).zero("S9"); _righe_iva->add_omaggi(r, conto);
((TRiga_documento &)r).dirty_fields(); else
TCurrency_documento c(r.imponibile()); _righe_iva->add(r, conto);
((TRiga_documento &)r).dirty_fields(); const TString16 cod(r.get(RDOC_CODIVA));
((TSpesa_prest &)r.spesa()).put("S9", (char) tipo_rit);
TRectype & h = _movimento->lfile().curr(); if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi.
real val; {
if (r.doc().in_valuta()) // Totalizza per ogni codice iva il lordo
{ if (!_totali_lordi.is_key(cod))
val = h.get_real(MOV_TOTDOCVAL) - c.get_num(); _totali_lordi.add(cod, new real);
h.put(MOV_TOTDOCVAL, val); real& rl = (real&) _totali_lordi[cod];
} rl += r.imponibile(TRUE);
c.change_to_firm_val(); }
val = h.get_real(MOV_TOTDOC) - c.get_num(); }
h.put(MOV_TOTDOC, val);
if (tipo_rit == 'F')
{
val = h.get_real(MOV_RITFIS) + c.get_num();
h.put(MOV_RITFIS, val);
}
else
if (tipo_rit == 'S')
{
val = h.get_real(MOV_RITSOC) + c.get_num();
h.put(MOV_RITSOC, val);
}
}
}
} }
} }
} }

View File

@ -293,10 +293,10 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array)
display_error(doc); display_error(doc);
return 0L; return 0L;
} }
real tot = doc.totale_doc(); const real tot = doc.totale_doc() - doc.ritenute();
doc.put(DOC_CODPAG, codpag); //placeholder doc.put(DOC_CODPAG, codpag); //placeholder
const TCurrency_documento totale_fatt(doc.totale_doc(), doc); const TCurrency_documento totale_fatt(tot, doc);
const bool valuta = doc.in_valuta(); const bool valuta = doc.in_valuta();
const real change = doc.cambio(); const real change = doc.cambio();
const TDate datafatt = doc.get_date(DOC_DATADOC); const TDate datafatt = doc.get_date(DOC_DATADOC);
@ -486,7 +486,8 @@ void TGenerazione_effetti::calc_pagamento(TDocumento& doc)
TPagamento& pag = doc.pagamento(); TPagamento& pag = doc.pagamento();
// const real change = doc.cambio(); // const real change = doc.cambio();
const TCurrency_documento tot_doc(doc.totale_doc(), doc); const real tot = doc.totale_doc() - doc.ritenute();
const TCurrency_documento tot_doc(tot, doc);
const TCurrency_documento totspese(doc.spese(), doc); const TCurrency_documento totspese(doc.spese(), doc);
const TCurrency_documento totimposte(doc.imposta(TRUE), doc); const TCurrency_documento totimposte(doc.imposta(TRUE), doc);
const TCurrency_documento totimponibili(tot_doc - totimposte - totspese); const TCurrency_documento totimponibili(tot_doc - totimposte - totspese);
@ -558,7 +559,8 @@ void TGenerazione_effetti::generate_bill(TDocumento& doc) // bill in inglese sig
if (data.empty()) if (data.empty())
data = doc.get(DOC_DATADOC); data = doc.get(DOC_DATADOC);
const TCurrency_documento totale_fatt(doc.totale_doc(), doc); // Importo in valuta const real tot = doc.totale_doc() - doc.ritenute();
const TCurrency_documento totale_fatt(tot, doc); // Importo in valuta
const TCurrency_documento imppagato(doc.get_real(DOC_IMPPAGATO), doc); // Anticipo pagamento const TCurrency_documento imppagato(doc.get_real(DOC_IMPPAGATO), doc); // Anticipo pagamento
if (totale_fatt > imppagato && !doc.get_bool(DOC_ACCSALDO)) // procede se non e' a saldo if (totale_fatt > imppagato && !doc.get_bool(DOC_ACCSALDO)) // procede se non e' a saldo
{ {

View File

@ -180,8 +180,20 @@ bool note_hndl( TMask_field& f, KEY key )
TDocumento_mask & m = (TDocumento_mask &) f.mask(); TDocumento_mask & m = (TDocumento_mask &) f.mask();
if (key == K_TAB && (f.focusdirty() || !m.is_running())) if (key == K_TAB && (f.focusdirty() || !m.is_running()))
{ {
TTable & note = (TTable &) ((TEdit_field &) f).browse()->cursor()->file(); TTable & note = (TTable &) ((TEdit_field &) f).browse()->cursor()->file();
// gestione del campo con descrizione estesa
TString stringone;
TRectype& rec = note.curr();
TString4 fieldname;
for (int i = 0; i < 6; i++)
{
fieldname.format("S%d", i);
stringone << rec.get(fieldname);
}
stringone.replace((char)0xB6, '\n');
m.set(F_NOTECLI, stringone);
note.setkey(1); note.setkey(1);
const TString16 cod(f.get()); const TString16 cod(f.get());