Migliorata gestione split payment

git-svn-id: svn://10.65.10.50/branches/R_10_00@23051 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2015-03-31 06:04:40 +00:00
parent b130191aae
commit 6788cf17ed
21 changed files with 370 additions and 233 deletions

View File

@ -118,7 +118,7 @@ int cg1300(int argc, char* argv[])
case 'P': case 'P':
{ {
TAgg_nprot a; TAgg_nprot a;
a.run(argc, argv,TR("Rinumerazione numero di protocollo")); a.run(argc, argv,TR("Rinumerazione protocollo IVA"));
} }
break; break;
case 'T': case 'T':

View File

@ -55,13 +55,15 @@ END
RADIOBUTTON F_MODE 1 24 RADIOBUTTON F_MODE 1 24
BEGIN BEGIN
PROMPT 1 6 "@bRiparti da " PROMPT 1 6 "@bRipartire da "
ITEM "U|Ultima stampa" ITEM "U|Ultima stampa"
MESSAGE CLEAR,F_PROT MESSAGE CLEAR,F_PROT
ITEM "N|Numero specificato" ITEM "N|Numero specificato"
MESSAGE ENABLE,F_PROT MESSAGE ENABLE,F_PROT
ITEM "A|Inizio anno" ITEM "A|Inizio anno"
MESSAGE CLEAR,F_PROT MESSAGE CLEAR,F_PROT
ITEM "P|Uguale a num. doc."
MESSAGE CLEAR,F_PROT
END END
DATE F_DA DATE F_DA
@ -78,7 +80,7 @@ END
ENDPAGE ENDPAGE
TOOLBAR "topbar" 0 0 0 2 TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h> #include <elabar.h>
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -5,10 +5,12 @@
#include <progind.h> #include <progind.h>
#include <tabutil.h> #include <tabutil.h>
#include <relation.h> #include <relation.h>
#include <recarray.h>
#include "cg1300.h" #include "cg1300.h"
#include "cg1303.h" #include "cg1303.h"
#include <causali.h>
#include <mov.h> #include <mov.h>
#include <partite.h> #include <partite.h>
@ -19,9 +21,18 @@ HIDDEN bool filtra_mov(const TRelation* r)
{ {
const TRectype& mov = r->curr(); const TRectype& mov = r->curr();
const int annoiva = mov.get_int(MOV_ANNOIVA); const int annoiva = mov.get_int(MOV_ANNOIVA);
const TString16 reg = mov.get(MOV_REG); TString4 reg = mov.get(MOV_REG);
const TAgg_nprot& a = app();
if (reg.full() && reg != a.reg())
{
const TString& codcaus = mov.get(MOV_CODCAUS);
const TString& truereg = cache().get(LF_CAUSALI, codcaus, CAU_REG);
if (truereg != reg && truereg == a.reg()) // REG incoerente
reg = truereg;
}
TAgg_nprot& a = app();
return a.anno() == annoiva && a.reg() == reg; return a.anno() == annoiva && a.reg() == reg;
} }
@ -43,14 +54,15 @@ void TAgg_nprot::main_loop()
bool TAgg_nprot::rinumera_prot(char mode, long last_prot) bool TAgg_nprot::rinumera_prot(char mode, long last_prot)
{ {
TTable reg("REG"); TTable reg("REG");
TString16 s; s.format("%04d%s", _anno, (const char*)_reg); TString8 s; s.format("%04d%s", _anno, (const char*)_reg);
reg.put("CODTAB", s); reg.put("CODTAB", s);
if (reg.read() != NOERR) if (reg.read() != NOERR)
return error_box(FR("Impossibile leggere il registro %s del %d"), return error_box(FR("Impossibile leggere il registro %s del %d"),
(const char*)_reg, _anno); (const char*)_reg, _anno);
TFast_isamfile fastmov(LF_MOV);
TRelation rel (LF_MOV); TRelation rel (LF_MOV);
rel.add(LF_PARTITE,"NREG=NUMREG",2); rel.add(LF_PARTITE, "NREG=NUMREG", 2);
TLocalisamfile& mov = rel.lfile(); TLocalisamfile& mov = rel.lfile();
TLocalisamfile& part= rel.lfile(LF_PARTITE); TLocalisamfile& part= rel.lfile(LF_PARTITE);
@ -62,18 +74,16 @@ bool TAgg_nprot::rinumera_prot(char mode, long last_prot)
if (nitems == 0) if (nitems == 0)
return warning_box(TR("Non ci sono movimenti da rinumerare")); return warning_box(TR("Non ci sono movimenti da rinumerare"));
TConfig cnf(CONFIG_DITTA,"cg"); const bool sc_enabled = ini_get_bool(CONFIG_DITTA,"cg", "GesSal");
const bool sc_enabled = cnf.get_bool("GesSal");
cursor.freeze(); cursor.freeze();
cursor = 0L; cursor = 0L;
TProgind p(nitems, TR("Elaborazione in corso...") , FALSE, TRUE); TProgind p(nitems, TR("Elaborazione in corso...") , FALSE, TRUE);
long protiva, uprotiva;
if (mode == 'N' || mode == 'U') if (mode == 'N' || mode == 'U')
{ {
long protiva, uprotiva;
for (; cursor.pos() < nitems; ++cursor) for (; cursor.pos() < nitems; ++cursor)
{ {
p.addstatus(1); p.addstatus(1);
@ -115,21 +125,41 @@ bool TAgg_nprot::rinumera_prot(char mode, long last_prot)
dprot = uprot = 0L; dprot = uprot = 0L;
nprot = last_prot; nprot = last_prot;
long first_nreg = 0, first_nprot = 0;
long last_nreg = 0, last_nprot = 0;
for (; cursor.pos() < nitems; ++cursor) for (; cursor.pos() < nitems; ++cursor)
{ {
p.addstatus(1); p.addstatus(1);
protiva = mov.get_long(MOV_PROTIVA); const long protiva = mov.get_long(MOV_PROTIVA);
uprotiva = mov.get_long(MOV_UPROTIVA); const long uprotiva = mov.get_long(MOV_UPROTIVA);
const TString& reg = mov.get(MOV_REG);
nprot = nprot+1+dprot; //stile RPG
dprot = 0L; if (mode == 'P') // Modalità speciale COMARI protiva = numdoc
uprot = 0L; {
dprot = (uprotiva == 0L) ? 0L : (uprotiva - protiva); nprot = mov.get_long(MOV_NUMDOC);
uprot = (uprotiva == 0L) ? 0L : (nprot + dprot); dprot = uprot = 0;
}
mov.put(MOV_PROTIVA, nprot); else
mov.put(MOV_UPROTIVA, uprot); {
mov.rewrite(); nprot = nprot+1+dprot; //stile RPG
dprot = (uprotiva == 0L) ? 0L : (uprotiva - protiva);
uprot = (uprotiva == 0L) ? 0L : (nprot + dprot);
}
if (nprot != protiva || uprot != uprotiva || reg != _reg)
{
mov.put(MOV_REG, _reg);
mov.put(MOV_PROTIVA, nprot);
mov.put(MOV_UPROTIVA, uprot);
int err = mov.rewrite();
if (err != NOERR)
{
cantwrite_box("Movimenti IVA");
break;
}
}
// Aggiorna il nr di prot. iva sul file partite // Aggiorna il nr di prot. iva sul file partite
if (sc_enabled && rel.is_first_match(LF_PARTITE)) if (sc_enabled && rel.is_first_match(LF_PARTITE))
{ {
@ -139,11 +169,22 @@ bool TAgg_nprot::rinumera_prot(char mode, long last_prot)
part.rewrite(); part.rewrite();
} while (rel.next_match(LF_PARTITE)); } while (rel.next_match(LF_PARTITE));
} }
const long numreg = mov.get_long(MOV_NUMREG);
if (first_nreg <= 0)
{
first_nreg = numreg;
first_nprot = nprot;
}
last_nreg = numreg;
last_nprot = nprot;
} }
reg.put("I5", nprot + dprot); reg.put("I5", nprot + dprot);
reg.rewrite(); reg.rewrite();
return message_box(TR("Rinumerazione numero protocollo completata")); return message_box(FR("Rinumerazione numero protocollo completata\n"
"dal movimento %ld (%ld) al movimento %ld (%ld)"),
first_nreg, first_nprot, last_nreg, last_nprot);
} }

View File

@ -2,16 +2,14 @@
class TAgg_nprot : public TSkeleton_application class TAgg_nprot : public TSkeleton_application
{ {
TString16 _reg; TString4 _reg;
int _anno; int _anno;
public: protected:
virtual void main_loop();
int anno() const { return _anno; }
const TString& reg() const { return _reg; }
bool rinumera_prot(char mode, long last_prot); bool rinumera_prot(char mode, long last_prot);
TAgg_nprot() { } public:
virtual ~TAgg_nprot() { } int anno() const { return _anno; }
const TString& reg() const { return _reg; }
virtual void main_loop();
}; };

View File

@ -2129,7 +2129,7 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
for (int r = game->first(); r <= lastrow; r = game->succ(r)) for (int r = game->first(); r <= lastrow; r = game->succ(r))
{ {
dump_rec(ini, game->riga(r), r, pref); dump_rec(ini, game->riga(r), r, pref);
if (((tipo_movimento)game->riga(r).get_int(PART_TIPOMOV)) == tm_fattura) if (game->riga(r).tipo() == tm_fattura)
dump_fatt(ini, *game, r, pref); dump_fatt(ini, *game, r, pref);
} }
TRecord_array uns = game->unassigned(); TRecord_array uns = game->unassigned();

View File

@ -19,6 +19,7 @@
#define F_DATACOMP 116 #define F_DATACOMP 116
#define F_ANNOIVA 117 #define F_ANNOIVA 117
#define F_NUMDOCEXT 130 #define F_NUMDOCEXT 130
#define F_CC_NUMREG 163
#define F_CLIFO 128 #define F_CLIFO 128
#define F_CLIENTE 151 #define F_CLIENTE 151

View File

@ -54,6 +54,16 @@ BEGIN
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
HELP "Data in cui viene registrata l'operazione" HELP "Data in cui viene registrata l'operazione"
MESSAGE COPY,F_ANNOIVA,7,10 MESSAGE COPY,F_ANNOIVA,7,10
USE LF_MOV KEY 2
DISPLAY "Data@10" DATAREG
DISPLAY "Numero@7" NUMREG
DISPLAY "Causale" CODCAUS
DISPLAY "Documento" NUMDOC
DISPLAY "Protoc." PROTIVA
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DATAREG DATAREG
OUTPUT F_NUMREG NUMREG
CHEKCTYPE SEARCH
END END
NUMBER F_ANNOIVA 4 NUMBER F_ANNOIVA 4
@ -82,6 +92,8 @@ BEGIN
ADD RUN cg0 -4 ADD RUN cg0 -4
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Causale assente" WARNING "Causale assente"
MESSAGE EMPTY SHOW,F_NUMREG|HIDE,F_CC_NUMREG
MESSAGE SHOW,F_CC_NUMREG|HIDE,F_NUMREG
END END
STRING F_DESCRCAUS 50 STRING F_DESCRCAUS 50
@ -107,7 +119,7 @@ BEGIN
PROMPT 3 10 "Numero operazione " PROMPT 3 10 "Numero operazione "
HELP "Numero del movimento di prima nota da modificare" HELP "Numero del movimento di prima nota da modificare"
FIELD LF_MOV->NUMREG FIELD LF_MOV->NUMREG
USE LF_MOV SELECT BETWEEN(CODCAUS,#F_CODCAUS,#F_CODCAUS) USE LF_MOV
INPUT NUMREG F_NUMREG INPUT NUMREG F_NUMREG
DISPLAY "Numero@7" NUMREG DISPLAY "Numero@7" NUMREG
DISPLAY "Data@10" DATAREG DISPLAY "Data@10" DATAREG
@ -119,6 +131,18 @@ BEGIN
KEY 1 KEY 1
END END
NUMBER F_CC_NUMREG 7
BEGIN
PROMPT 3 10 "Numero operazione "
HELP "Numero del movimento di prima nota da modificare"
USE LF_MOV SELECT BETWEEN(CODCAUS,#F_CODCAUS,#F_CODCAUS)
INPUT NUMREG F_CC_NUMREG
COPY DISPLAY F_NUMREG
OUTPUT F_CC_NUMREG NUMREG
MESSAGE COPY F_NUMREG
FLAGS "H"
END
/* DATACOMP new way /* DATACOMP new way
DATE F_DATACOMP DATE F_DATACOMP
BEGIN BEGIN

View File

@ -285,7 +285,7 @@ ENDPAGE
ENDMASK ENDMASK
PAGE "Riga" -1 -1 78 11 PAGE "Riga" -1 -1 78 13
GROUPBOX DLG_NULL 76 6 GROUPBOX DLG_NULL 76 6
BEGIN BEGIN

View File

@ -127,7 +127,7 @@ BEGIN
ITEM "Pagamenti@14" ITEM "Pagamenti@14"
ITEM "Altri importi@14" ITEM "Altri importi@14"
ITEM "Descrizione@50" ITEM "Descrizione@50"
FLAGS "D" FLAGS "L"
END END
SPREADSHEET P_SCADENZE SPREADSHEET P_SCADENZE
@ -146,9 +146,10 @@ BEGIN
ITEM "Prot. IVA" ITEM "Prot. IVA"
ITEM "Tipo" ITEM "Tipo"
ITEM "Riga pag." ITEM "Riga pag."
ITEM "Blocc." ITEM "Blocco"
ITEM "Motivazione@50" ITEM "Causale\nBlocco@6"
FLAGS "D" ITEM "Motivazione blocco@50"
FLAGS "L"
END END
ENDPAGE ENDPAGE
@ -218,7 +219,7 @@ ENDPAGE
ENDMASK ENDMASK
PAGE "Sheet Scadenze" -1 -1 68 15 PAGE "Sheet Scadenze" -1 -1 68 10
NUMBER 101 4 NUMBER 101 4
BEGIN BEGIN
@ -296,28 +297,22 @@ END
BOOLEAN 114 BOOLEAN 114
BEGIN BEGIN
PROMPT 1 8 "Pagamenti bloccati" PROMPT 1 8 "Pagamenti bloccati"
MESSAGE FALSE CLEAR,115|CLEAR,116
MESSAGE TRUE ENABLE,115
END END
STRING 115 6 STRING 115 6
BEGIN BEGIN
PROMPT 1 9 "Motivo " PROMPT 26 8 ""
USE %MBP
INPUT CODTAB 115
DISPLAY "Codice"
DISPLAY "Descrizione@50"
OUTPUT 115 CODTAB
OUTPUT 116 S0
FLAGS "D"
END END
STRING 116 50 STRING 116 50 65
BEGIN BEGIN
PROMPT 17 9 "" PROMPT 1 9 ""
FLAGS "D"
END END
ENDPAGE
TOOLBAR "" 0 0 0 2
BUTTON DLG_CANCEL 12 2 BUTTON DLG_CANCEL 12 2
BEGIN BEGIN
PROMPT -12 -1 "" PROMPT -12 -1 ""

View File

@ -51,7 +51,7 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
{ {
case K_SPACE: case K_SPACE:
{ {
const bool can = !recalc && pag.n_rate() > 1 && ps.row(r).get_char(13) != 'X'; const bool can = !recalc && pag.n_rate() > 1 && ps.row(r).get_char(14) != 'X';
ps.sheet_mask().enable(DLG_DELREC, can); ps.sheet_mask().enable(DLG_DELREC, can);
} }
break; break;
@ -97,7 +97,7 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
break; break;
case K_DEL: case K_DEL:
doit = !recalc && pag.n_rate() > 1 && ps.row(r).get_char(13) != 'X'; doit = !recalc && pag.n_rate() > 1 && ps.row(r).get_char(14) != 'X'; // non cancellabile
if (doit) if (doit)
{ {
pag.remove_rata(r); pag.remove_rata(r);
@ -882,7 +882,8 @@ bool TPrimanota_application::read_scadenze(TMask& m)
} }
str.add(scadenza.get(SCAD_DESCR), 11); str.add(scadenza.get(SCAD_DESCR), 11);
str.add(scadenza.get(SCAD_BLOCCATA), 12); str.add(scadenza.get(SCAD_BLOCCATA), 12);
str.add(prot ? "X" : " ", 13); str.add(scadenza.get(SCAD_MOTIVO), 13);
str.add(prot ? "X" : " ", 14);
} }
m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2"); m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
m.set(FS_NAMEPAG, pag.name()); m.set(FS_NAMEPAG, pag.name());
@ -1038,8 +1039,8 @@ void TPrimanota_application::write_scadenze(const TMask& m)
scadenza.put(SCAD_CODPAG, codpag); // Codice pagamento scadenza.put(SCAD_CODPAG, codpag); // Codice pagamento
scadenza.put(SCAD_CODAG, agente); // Codice agente scadenza.put(SCAD_CODAG, agente); // Codice agente
scadenza.put(SCAD_DATASCAD, row.get(0)); // 0 = Data scadenza scadenza.put(SCAD_DATASCAD, row.get(0)); // 0 = Data scadenza
scadenza.put(SCAD_IMPORTO, row.get()); // 1 = Importo scadenza.put(SCAD_IMPORTO, row.get()); // 1 = Importo
scadenza.put(SCAD_IMPORTOVAL, row.get()); // 2 = Importo in valuta scadenza.put(SCAD_IMPORTOVAL, row.get()); // 2 = Importo in valuta
row.get(); // 3 = Percentuale row.get(); // 3 = Percentuale
scadenza.put(SCAD_TIPOPAG, row.get()); // 4 = Tipo pagamento scadenza.put(SCAD_TIPOPAG, row.get()); // 4 = Tipo pagamento
@ -1051,6 +1052,7 @@ void TPrimanota_application::write_scadenze(const TMask& m)
scadenza.put(SCAD_CODCAB, row.get()); //10 = Vs CAB scadenza.put(SCAD_CODCAB, row.get()); //10 = Vs CAB
scadenza.put(SCAD_DESCR, row.get()); //11 = Note scadenza.put(SCAD_DESCR, row.get()); //11 = Note
scadenza.put(SCAD_BLOCCATA, row.get()); //12 = Non pagabile scadenza.put(SCAD_BLOCCATA, row.get()); //12 = Non pagabile
scadenza.put(SCAD_MOTIVO, row.get()); //13 = Motivo blocco
scadenza.put(SCAD_IMPORTOANT, ((real &)ant[i])); scadenza.put(SCAD_IMPORTOANT, ((real &)ant[i]));
} }
} }

View File

@ -195,7 +195,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
const int nrigp = oldpag.get_int(PAGSCA_NRIGP); const int nrigp = oldpag.get_int(PAGSCA_NRIGP);
const TRiga_partite& sum = p.riga(nrigp); const TRiga_partite& sum = p.riga(nrigp);
_assigned = oldpag.get_int(PAGSCA_NRIGA) != TPartita::UNASSIGNED; _assigned = oldpag.get_int(PAGSCA_NRIGA) != TPartita::UNASSIGNED;
_tipomov = (tipo_movimento)sum.get_int(PART_TIPOMOV); _tipomov = sum.tipo();
_swap_ritsoc = sum.sezione() != sum.sezione_ritsoc(); _swap_ritsoc = sum.sezione() != sum.sezione_ritsoc();
const TRiga_partite& fatt = _assigned ? scad.riga() : sum; const TRiga_partite& fatt = _assigned ? scad.riga() : sum;
@ -920,7 +920,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
riga_fattura.add(riga.get(PART_DATAREG)); riga_fattura.add(riga.get(PART_DATAREG));
riga_fattura.add(riga.get(PART_NUMDOC)); riga_fattura.add(riga.get(PART_NUMDOC));
riga_fattura.add(riga.get(PART_PROTIVA)); riga_fattura.add(riga.get(PART_PROTIVA));
riga_fattura.add(riga.get(PART_TIPOMOV)); riga_fattura.add((int)riga.tipo());
for (int ra = 1; ra <= riga.rate(); ra++) for (int ra = 1; ra <= riga.rate(); ra++)
{ {
@ -930,16 +930,23 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row = riga_fattura; row = riga_fattura;
row.add(ra, 1); row.add(ra, 1);
row.add(scad.get(SCAD_DATASCAD), 3); row.add(scad.get(SCAD_DATASCAD), 3);
gm.add_importo(row, scad.importo(FALSE), NULL, 5); gm.add_importo(row, scad.importo(false), NULL, 5);
if (in_valuta) if (in_valuta)
gm.add_importo(row, scad.importo(TRUE), prima_valuta.codice(), 6); gm.add_importo(row, scad.importo(true), prima_valuta.codice(), 6);
const TString& descr = scad.get(SCAD_DESCR); const TString& descr = scad.get(SCAD_DESCR);
if (descr.not_empty()) if (descr.full())
row.add(descr, 4); row.add(descr, 4);
const bool blocked = scad.get_bool(SCAD_BLOCCATA); const bool blocked = scad.get_bool(SCAD_BLOCCATA);
row.add(blocked ? "X" : " ", 13); row.add(blocked ? "X" : " ", 13);
if (blocked)
{
const TString& cbp = scad.get(SCAD_MOTIVO);
row.add(cbp);
if (cbp.full())
row.add(cache().get("%CBP", cbp, "S0"));
}
const int lastp = scad.last(); const int lastp = scad.last();
for (int pa = scad.first(); pa <= lastp; pa = scad.succ(pa)) for (int pa = scad.first(); pa <= lastp; pa = scad.succ(pa))
@ -971,7 +978,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add(sum.get(PART_DATAREG)); row.add(sum.get(PART_DATAREG));
row.add(sum.get(PART_NUMDOC)); row.add(sum.get(PART_NUMDOC));
row.add(""); row.add("");
row.add(sum.get(PART_TIPOMOV)); row.add((int)sum.tipo());
row.add(pa); row.add(pa);
// Le ritenute non possono esistere in valuta // Le ritenute non possono esistere in valuta
@ -983,7 +990,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& rrit = gm.add_colored_row(sheet, 'R'); TToken_string& rrit = gm.add_colored_row(sheet, 'R');
rrit.add(TR("Ritenute professionali"), 4); rrit.add(TR("Ritenute professionali"), 4);
gm.add_importo(rrit, rit, FALSE); gm.add_importo(rrit, rit, FALSE);
rrit.add(sum.get(PART_TIPOMOV), 11); rrit.add((int)sum.tipo(), 11);
} }
const TImporto soc(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC)); const TImporto soc(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC));
@ -992,7 +999,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& rrit = gm.add_colored_row(sheet, 'R'); TToken_string& rrit = gm.add_colored_row(sheet, 'R');
rrit.add(TR("Ritenute sociali"), 4); rrit.add(TR("Ritenute sociali"), 4);
gm.add_importo(rrit, soc, FALSE); gm.add_importo(rrit, soc, FALSE);
rrit.add(sum.get(PART_TIPOMOV), 11); rrit.add((int)sum.tipo(), 11);
} }
} }
@ -1017,7 +1024,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
gm.add_importo(rabb, abb); gm.add_importo(rabb, abb);
rabb.add(""); rabb.add("");
} }
rabb.add(sum.get(PART_TIPOMOV), 11); rabb.add((int)sum.tipo(), 11);
} }
// Le differenze cambio possono esistere solo in valuta // Le differenze cambio possono esistere solo in valuta
@ -1029,7 +1036,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& rdiff = gm.add_colored_row(sheet, 'C'); TToken_string& rdiff = gm.add_colored_row(sheet, 'C');
rdiff.add(TR("Differenza cambio"), 4); rdiff.add(TR("Differenza cambio"), 4);
gm.add_importo(rdiff, diff); gm.add_importo(rdiff, diff);
rdiff.add(sum.get(PART_TIPOMOV), 11); rdiff.add((int)sum.tipo(), 11);
} }
} }
@ -1089,7 +1096,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
row.add(sum.get(PART_DATAREG)); row.add(sum.get(PART_DATAREG));
row.add(sum.get(PART_NUMDOC)); row.add(sum.get(PART_NUMDOC));
row.add(""); row.add("");
row.add(sum.get(PART_TIPOMOV)); row.add((int)sum.tipo());
row.add(pa); row.add(pa);
const TImporto rit(sez, pag.get_real(PAGSCA_RITENUTE)); const TImporto rit(sez, pag.get_real(PAGSCA_RITENUTE));
@ -1098,7 +1105,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& row = gm.add_colored_row(sheet, 'R'); TToken_string& row = gm.add_colored_row(sheet, 'R');
row.add(TR("Ritenute professionali"), 4); row.add(TR("Ritenute professionali"), 4);
gm.add_importo(row, rit, FALSE); gm.add_importo(row, rit, FALSE);
row.add(sum.get(PART_TIPOMOV), 11); row.add((int)sum.tipo(), 11);
tot_lit += rit; tot_lit += rit;
} }
@ -1108,7 +1115,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& row = gm.add_colored_row(sheet, 'R'); TToken_string& row = gm.add_colored_row(sheet, 'R');
row.add(TR("Ritenute sociali"), 4); row.add(TR("Ritenute sociali"), 4);
gm.add_importo(row, soc, FALSE); gm.add_importo(row, soc, FALSE);
row.add(sum.get(PART_TIPOMOV), 11); row.add((int)sum.tipo(), 11);
tot_lit += soc; tot_lit += soc;
} }
@ -1138,7 +1145,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
rabb.add(""); rabb.add("");
tot_lit += abb; tot_lit += abb;
} }
rabb.add(sum.get(PART_TIPOMOV), 11); rabb.add((int)sum.tipo(), 11);
} }
/* Continuo a ritenre impossibile ... per ora /* Continuo a ritenre impossibile ... per ora
// Le differenze cambio possono esistere solo in valuta // Le differenze cambio possono esistere solo in valuta
@ -1150,7 +1157,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& rdiff = gm.add_colored_row(sheet, 'C'); TToken_string& rdiff = gm.add_colored_row(sheet, 'C');
rdiff.add(TR("Differenza cambio"), 4); rdiff.add(TR("Differenza cambio"), 4);
gm.add_importo(rdiff, diff); gm.add_importo(rdiff, diff);
rdiff.add(sum.get(PART_TIPOMOV), 11); rdiff.add((int)sum.tipo(), 11);
} }
} }
*/ */
@ -1245,6 +1252,12 @@ bool TGame_mask::scadenze_notify(TSheet_field& scadenze, int r, KEY k)
gm.send_key(K_CTRL + 'N', 0, &scadenze); // Simula la pressione del tasto nuovo gm.send_key(K_CTRL + 'N', 0, &scadenze); // Simula la pressione del tasto nuovo
return false; // Rifiuta l'aggiunta di una riga return false; // Rifiuta l'aggiunta di una riga
} }
if (k == K_DEL || k == K_SPACE)
{
return false;
}
return true; return true;
} }

View File

@ -155,9 +155,23 @@ END
BOOLEAN 113 BOOLEAN 113
BEGIN BEGIN
PROMPT 12 11 "Bloccata" PROMPT 12 11 "Bloccata"
MESSAGE FALSE CLEAR,114
MESSAGE TRUE ENABLE,114
END END
BOOLEAN 114 STRING 114 6
BEGIN
PROMPT 30 11 "Motivo "
USE %CBP
INPUT CODTAB 114
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT 114 CODTAB
CHECKTYPE NORMAL
FLAGS "D"
END
BOOLEAN 115
BEGIN BEGIN
PROMPT 1 -1 "Non cancellabile" PROMPT 1 -1 "Non cancellabile"
FLAGS "D" FLAGS "D"

View File

@ -232,6 +232,7 @@ BEGIN
ITEM "Vs.CAB" ITEM "Vs.CAB"
ITEM "Note@50" ITEM "Note@50"
ITEM "Bloccata" ITEM "Bloccata"
ITEM "Motivo"
ITEM "Non cancellabile" ITEM "Non cancellabile"
END END

View File

@ -157,7 +157,6 @@ public: // vedi sopra per le fisime morali
int _tipodet; // tipo detraibilita' int _tipodet; // tipo detraibilita'
virtual TObject* dup() const { return new _CorrItem(*this); } virtual TObject* dup() const { return new _CorrItem(*this); }
_CorrItem() {} _CorrItem() {}
virtual ~_CorrItem() {}
}; };
class _DescrItem : public TObject class _DescrItem : public TObject

View File

@ -496,9 +496,6 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
// Se stiamo ricalcolando per registri(_recalc_regis) azzera PRM e PRP // Se stiamo ricalcolando per registri(_recalc_regis) azzera PRM e PRP
start = 2; stop = 3; start = 2; stop = 3;
} }
else
if (atoi(_year) < 1998)
stop = 0; // Solo PIM
// PIM / PIS // PIM / PIS
for (int i = start; i <= stop; i++) // Ciclo per le tabelle da azzerare for (int i = start; i <= stop; i++) // Ciclo per le tabelle da azzerare
{ {
@ -580,12 +577,15 @@ bool TLiquidazione_app::ivadiff_chiusa(const TRectype& mov, const TDate& fine) c
const TDate data = rid.get("DATAREGP"); const TDate data = rid.get("DATAREGP");
if (data > fine) if (data > fine)
continue; continue;
if (data == fine && rid.get_long("NUMREGP") == numreg)
continue; // Ignora pagamento automatico dopo un anno
const real imp = rid.get(RMI_IMPOSTA); const real imp = rid.get(RMI_IMPOSTA);
if (!imp.is_zero()) if (!imp.is_zero())
{ {
const char sez = rid.get_char("SEZIONE"); const char sez = rid.get_char("SEZIONE");
tot += TImporto(sez, imp); tot += TImporto(sez, imp);
if (rid.get_int(MOV_TIPOMOV) > 1) if (!some_pag && rid.get_int(MOV_TIPOMOV) > 1)
some_pag = true; some_pag = true;
} }
} }
@ -786,6 +786,59 @@ static void LOG_IVA_DIFF(const TRectype& id)
#endif #endif
} }
static void LOG_PIM_DIFF(const TRectype& pim)
{
#ifndef NDEBUG
static FILE* file[2] = { NULL, NULL };
const real iva_ven = pim.get("R29");
const real iva_acq = pim.get("R33");
int nf = -1;
if (!iva_ven.is_zero())
nf = 0; else
if (!iva_acq.is_zero())
nf = 1;
if (nf < 0)
return;
FILE*& f = file[nf];
if (f == NULL)
{
const char* name = NULL;
switch (nf)
{
case 0: name = "PIM_Ven_Diff.log"; break;
case 1: name = "PIM_Acq_Diff.log"; break;
default: break;
}
fopen_s(&f, name, "w");
if (f == NULL)
{
cantwrite_box(name);
fopen_s(&f, name, "w");
}
if (f != NULL)
fprintf(f, "CODTAB\tGen\tFeb\tMar\tApr\tMag\tGiu\tLug\tAgo\tSet\tOtt\tNov\tDic\n");
}
if (f != NULL)
{
TToken_string msg(255, '\t');
const TString& codtab = pim.get("CODTAB");
msg = codtab;
const int mese = atoi(codtab.mid(14, 2));
for (int i = mese; i > 0; i--)
msg.add(" ");
if (!iva_ven.is_zero())
msg.add(iva_ven.stringa(0,2));
else
msg.add(iva_acq.stringa(0,2));
fprintf(f, "%s\n", (const char*)msg);
}
#endif
}
static bool is_autofattura_articolo_17(const TRectype& mov) static bool is_autofattura_articolo_17(const TRectype& mov)
{ {
// E' giusto prendere il tipo documento dal movimento senza fidarsi della causale? si. // E' giusto prendere il tipo documento dal movimento senza fidarsi della causale? si.
@ -978,7 +1031,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (_isviaggio) if (_isviaggio)
f74 = TDate(1, 1, year_int-1); f74 = TDate(1, 1, year_int-1);
if (_recalc_regis) // Vecchia selezione priam del 1998 o calcolo progressivi per stampa registri bollati if (_recalc_regis) // Vecchia selezione prima del 1998 o calcolo progressivi per stampa registri bollati
{ {
t.set_month(month == 13 ? 12 : month); t.set_month(month == 13 ? 12 : month);
t.set_year(year_int); t.set_year(year_int);
@ -1047,7 +1100,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
#ifndef NDEBUG #ifndef NDEBUG
if (_mov->get_long(MOV_CODCF) == 940) if (_mov->get_long(MOV_NUMREG) == 21438)
int cazzone = 1; int cazzone = 1;
#endif #endif
@ -1069,15 +1122,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
continue; // Ignora movimento di split payment continue; // Ignora movimento di split payment
// Inizio gestione IVA differita // Inizio gestione IVA differita
const bool iva_diff = _mov->get_bool(MOV_LIQDIFF); const bool iva_diff = _mov->get_bool(MOV_LIQDIFF) && is_IVA_diff(_mov->curr());
const bool iva_cass = !iva_diff && !_isviaggio && tm > tm_nessuno && _mov->get_bool(MOV_IVAXCASSA) && is_IVAxCassa(_mov->curr()); const bool iva_cass = !iva_diff && !_isviaggio && tm > tm_nessuno && _mov->get_bool(MOV_IVAXCASSA) && is_IVAxCassa(_mov->curr());
const bool movdiff = (iva_diff || iva_cass) && !_recalc_regis; // Aggiunto test su ricalcolo da registri 13-12-2012 const bool bIsMovDiff = (iva_diff || iva_cass) && !_recalc_regis; // Aggiunto test su ricalcolo da registri 13-12-2012
bool dok = is_date_ok(date, month, liqmonth, year_int); bool dok = is_date_ok(date, month, liqmonth, year_int);
TPartite_array arrpart; // Partite interessate TPartite_array arrpart; // Partite interessate
TPointer_array pagscatt; // Righe di pagsca interessate TPointer_array pagscatt; // Righe di pagsca interessate
if (movdiff && tm == tm_fattura) if (bIsMovDiff && tm == tm_fattura)
{ {
const bool id_chiusa = ivadiff_chiusa(_mov->curr(), inizio); const bool id_chiusa = ivadiff_chiusa(_mov->curr(), inizio);
if (!dok && id_chiusa) if (!dok && id_chiusa)
@ -1244,7 +1297,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (_comp_acconto && !_isdifferita && date.month() == accmonth && date.day() > 20) if (_comp_acconto && !_isdifferita && date.month() == accmonth && date.day() > 20)
continue; continue;
// Ciclo sulle righe iva del movimento // Ciclo sulle righe IVA del movimento
do do
{ {
const int rmi_tipoatt = max(_rmoviva->get_int(RMI_TIPOATT), 1); // Poteva capitare tipoatt == 0 const int rmi_tipoatt = max(_rmoviva->get_int(RMI_TIPOATT), 1); // Poteva capitare tipoatt == 0
@ -1314,7 +1367,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real impon_det; // Imponibile detraibile real impon_det; // Imponibile detraibile
real impos_det; // Imposta detraibile real impos_det; // Imposta detraibile
if (movdiff && tm == tm_fattura) if (bIsMovDiff && tm == tm_fattura)
{ {
const char sezfat = tipomov == vendita ? 'D' : 'A'; const char sezfat = tipomov == vendita ? 'D' : 'A';
const TDate datareg = _mov->get(MOV_DATAREG); const TDate datareg = _mov->get(MOV_DATAREG);
@ -1346,6 +1399,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
id.put("IMPORTO", imponibile_orig+imposta_orig); id.put("IMPORTO", imponibile_orig+imposta_orig);
id.put(RMI_IMPONIBILE, imponibile_orig); id.put(RMI_IMPONIBILE, imponibile_orig);
/* cazzata?
if (percind > ZERO) // Nel caso di IVA indetraibile memorizza solo la parte detraibile! if (percind > ZERO) // Nel caso di IVA indetraibile memorizza solo la parte detraibile!
{ {
real imp_det, iva_det, imp_ind, iva_ind; real imp_det, iva_det, imp_ind, iva_ind;
@ -1354,6 +1408,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
id.put(RMI_IMPOSTA, iva_det); id.put(RMI_IMPOSTA, iva_det);
} }
else else
*/
id.put(RMI_IMPOSTA, imposta_orig); id.put(RMI_IMPOSTA, imposta_orig);
const int ew = id.write_rewrite(); const int ew = id.write_rewrite();
@ -1503,7 +1558,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
else else
{ {
if (movdiff) if (bIsMovDiff)
{ {
if (is_date_ok(date, month, liqmonth, year_int)) // 5-3-2014 if (is_date_ok(date, month, liqmonth, year_int)) // 5-3-2014
{ {
@ -1525,7 +1580,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
//qui da verificare //qui da verificare
if ((imponibile.is_zero() && imposta.is_zero()) && if ((imponibile.is_zero() && imposta.is_zero()) &&
(movdiff && (bIsMovDiff &&
(is_detraibile > 0 || (is_detraibile > 0 ||
(diff_imp.is_zero() && diff_iva.is_zero() && (diff_imp.is_zero() && diff_iva.is_zero() &&
incdiff_imp.is_zero() && incdiff_iva.is_zero()) incdiff_imp.is_zero() && incdiff_iva.is_zero())
@ -1575,7 +1630,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
codreg = comune.get_int(COM_CODREG) + 1; codreg = comune.get_int(COM_CODREG) + 1;
} }
if (movdiff) if (bIsMovDiff)
{ {
vt_imponibile[codreg] += incdiff_imp; vt_imponibile[codreg] += incdiff_imp;
vt_imposta[codreg] += incdiff_iva; vt_imposta[codreg] += incdiff_iva;
@ -2359,28 +2414,27 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
cs.add(v.string(), 1); cs.add(v.string(), 1);
tab->put("S2",cs); tab->put("S2",cs);
if (is_detraibile == 0 && if (is_detraibile == 0 && // eseguire solo una volta (is_detraibile è in un ciclo da 0 a 1)
(!diff_imp.is_zero() ||!diff_iva.is_zero() || (!diff_imp.is_zero() || !diff_iva.is_zero() ||
!incdiff_imp.is_zero() || !incdiff_iva.is_zero())) !incdiff_imp.is_zero() || !incdiff_iva.is_zero()))
{ {
if (tipomov == vendita) if (tipomov == vendita)
{ {
#ifndef NDEBUG #ifndef NDEBUG
if (month == 7 && reg == "VEN" && !incdiff_iva.is_zero()) if (month == 13 && reg == "VEN" && !incdiff_iva.is_zero())
{ {
const real oldv = _pim->get("R29"); const real oldv = tab->get("R29");
const real newv = oldv + incdiff_iva; const real newv = oldv + incdiff_iva;
__trace("%s %s\t%s\t%s\t%7ld\t%s\t+\t%s\t=\t%s", tab->name(), (const char*)tab->curr().get("CODTAB"), (const char*)reg, (const char*)tipocr_s, __trace("%s %s\t%s\t%s\t%7ld\t%s\t+\t%s\t=\t%s", tab->name(), (const char*)tab->curr().get("CODTAB"), (const char*)reg, (const char*)tipocr_s,
_mov->get_long(MOV_NUMREG), oldv.stringa(12, 2), incdiff_iva.stringa(12, 2), newv.stringa(12, 2)); _mov->get_long(MOV_NUMREG), oldv.stringa(12, 2), incdiff_iva.stringa(12, 2), newv.stringa(12, 2));
} }
#endif #endif
// fatture vendita a liquidazione differita
// fatture vendita a liquidazione differita
tab->curr().add("R26", diff_imp); tab->curr().add("R26", diff_imp);
tab->curr().add("R27", diff_iva); tab->curr().add("R27", diff_iva);
tab->curr().add("R28", incdiff_imp); tab->curr().add("R28", incdiff_imp);
tab->curr().add("R29", incdiff_iva); tab->curr().add("R29", incdiff_iva);
fdiff_imp += diff_imp; fdiff_imp += diff_imp;
fdiff_iva += diff_iva; fdiff_iva += diff_iva;
fdiffinc_imp += incdiff_imp; fdiffinc_imp += incdiff_imp;
@ -2670,7 +2724,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
_plm->rewrite(); _plm->rewrite();
_pam->rewrite(); _pam->rewrite();
_pum->rewrite(); _pum->rewrite();
_pom->rewrite(); _pom->rewrite();
if (month == 13) if (month == 13)
{ {
@ -2678,10 +2732,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
for (int reg = 0; reg < 23; reg++) for (int reg = 0; reg < 23; reg++)
{ {
look_pem(pem, reg); look_pem(pem, reg);
real r = pem.get_real("R0") + vt_imponibile[reg]; pem.curr().add("R0", vt_imponibile[reg]);
pem.put("R0", r); pem.curr().add("R1", vt_imposta[reg]);
r = pem.get_real("R1") + vt_imposta[reg];
pem.put("R1", r);
pem.rewrite(); pem.rewrite();
} }
} }
@ -3436,7 +3488,6 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
// totali per annuali // totali per annuali
real vol_aff_1 = ZERO; real vol_aff_1 = ZERO;
real vol_aff_2 = ZERO; real vol_aff_2 = ZERO;
real vol_aff_t = ZERO;
real vol_aff_l = ZERO; real vol_aff_l = ZERO;
real tot_cong = ZERO; real tot_cong = ZERO;
@ -3458,9 +3509,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
} }
TLocalisamfile& attiv = _nditte->lfile(LF_ATTIV); TLocalisamfile& attiv = _nditte->lfile(LF_ATTIV);
FOR_EACH_TOKEN (atts, tmpatt)
const char* tmpatt;
while ((tmpatt = atts.get()) != NULL)
{ {
const TString16 att = tmpatt; const TString16 att = tmpatt;
@ -3626,21 +3675,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
*/ */
if (attc == 0 && is_lim && is_month_ok_strict(m,month)) if (attc == 0 && is_lim && is_month_ok_strict(m,month))
{ {
bool somma_rettifiche = FALSE; const bool somma_rettifiche = month < 13 || m < 13; // CM00278
if (year_int < 2000)
{
// se sono per benzinaro le conta solo in annuale,
// se no vanno solo in periodica
// almeno cosi' dicevano fino ad agosto
// poi, sara' il caldo, mi hanno detto che e' sbagliato
const TString& descrett = _lim->get("S0");
const bool isforbenzinaro = descrett[0] == '$' || (descrett[0] == '>' && descrett[1] == '>');
somma_rettifiche = !(month == 13 && !isforbenzinaro) && m < 13;
}
else
{
somma_rettifiche = month < 13 || m < 13; // CM00278
}
if (somma_rettifiche) if (somma_rettifiche)
{ {
const real rett = _lim->get_real("R5"); const real rett = _lim->get_real("R5");
@ -3787,30 +3822,26 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
if (month == 13) if (month == 13)
{ {
// totalizza volumi affari e calcola nuovo prorata // totalizza volumi affari e calcola nuovo prorata per tutte le attività
// per tutte le attivita' FOR_EACH_TOKEN(atts, tmpatt)
atts.restart();
while ((tmpatt = atts.get()) != NULL)
{ {
const TString8 att(tmpatt); const TString8 att = tmpatt;
const int tipoatt = att.right(1)[0] - '0'; const int tipoatt = att.right(1)[0] - '0';
if (tipoatt == 1) // su PLA l'attivita' e' sempre 1 if (tipoatt == 1) // su PLA l'attivita' e' sempre 1
{ {
if (!look_pla(att)) if (!look_pla(att))
continue; continue;
real vf1 = _pla->get_real("R14"); const real vf1 = _pla->get("R14");
real vf2 = _pla->get("S1"); const real vf2 = _pla->get("S1");
real iaq = _pla->get_real("R11"); // IVA acquisti const real iaq = _pla->get("R11"); // IVA acquisti
real ppg = _pla->get_real("R12"); // pro-rata pagato const real ppg = _pla->get("R12"); // pro-rata pagato
vol_aff_1 += vf1; vol_aff_1 += vf1;
vol_aff_2 += vf2; vol_aff_2 += vf2;
vol_aff_t = vf1 + vf2;
vol_aff_l += _pla->get_real("R0"); // volume affari lordo vol_aff_l += _pla->get_real("R0"); // volume affari lordo
real es_c1 = _pla->get_real("R1"); real es_c1 = _pla->get_real("R1"); // Tipo esenzione B1
real es_c2 = _pla->get_real("R2"); real es_c2 = _pla->get_real("R2");
real es_c3 = _pla->get_real("R3"); real es_c3 = _pla->get_real("R3");
real es_c1a = _pla->get_real("R15"); real es_c1a = _pla->get_real("R15");
@ -3821,7 +3852,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
real prorata = 0.0; real prorata = 0.0;
real conguaglio = 0.0; real conguaglio = 0.0;
real topay = 0.0; real topay = 0.0;
const real ris = vol_aff_t; // gia' esclusi: NS, B3, cess. amm const real ris = vf1 + vf2; // gia' esclusi: NS, B3, cess. amm
// calcola nuovo prorata dal 1998 per ogni attivita' (miste: 1+2) // calcola nuovo prorata dal 1998 per ogni attivita' (miste: 1+2)
const real rsa = ris - (es_c1a-es_c1a_am) - (es_c3-es_c3_am); const real rsa = ris - (es_c1a-es_c1a_am) - (es_c3-es_c3_am);
@ -4176,10 +4207,8 @@ void TLiquidazione_app::recalc_annual(const char* att)
real ven_lrd = 0.0; real ven_lrd = 0.0;
real volaff1 = 0.0; real volaff1 = 0.0;
real volaff2 = 0.0; real volaff2 = 0.0;
real imp_ifs = 0.0;
real imp_af = 0.0; TString4 codiva,reg,tiva;
real imp_va7 = 0.0;
TString16 codiva,reg,tiva;
TToken_string va7("",'!'); TToken_string va7("",'!');
const TString8 aaa(att); const TString8 aaa(att);
@ -4217,26 +4246,25 @@ void TLiquidazione_app::recalc_annual(const char* att)
reg = *_pim_codreg; reg = *_pim_codreg;
look_iva(codiva); look_reg(reg); look_iva(codiva); look_reg(reg);
tiva = _iva->get("S1"); tiva = _iva->get("S1");
const bool b3 = _iva->get("S2") == "B3" && atoi(_year) < 1998; const tiporeg treg = (tiporeg)_reg->get_long("I0");
tiporeg treg = (tiporeg)_reg->get_long("I0");
const bool corrisp = _reg->get_bool("B0"); const bool corrisp = _reg->get_bool("B0");
const tipo_sospensione simp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; const tipo_sospensione simp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
imp_ifs = _pim->get_real("R0");
imp_af = _pim->get_real("R7");
va7 = _pim->get("S0");
imp_va7 = va7.get(0);
imp_ifs -= imp_af + imp_va7; // Toglie le autofatture e le op. VA7
if ( // ESCLUSI: if ( // ESCLUSI:
strcmp(att,*_pim_codatt) != 0 || strcmp(att,*_pim_codatt) != 0 ||
treg != vendita || // non vendite treg != vendita || // non vendite
tipocr == 4 || // cessioni beni ammortizzabili tipocr == 4 || // cessioni beni ammortizzabili
tiva == "NS" || // non soggetti tiva == "NS" || // non soggetti
b3 || // bi tre
simp == normale || simp == normale ||
simp == liquidazione) // sospensione di imposta simp == liquidazione) // sospensione di imposta
continue; continue;
real imp_ifs = _pim->get("R0"); // Imponibile
real imp_af = _pim->get("R7"); // Autofatture
va7 = _pim->get("S0");
real imp_va7 = va7.get(0); // operazioni VA7
imp_ifs -= imp_af + imp_va7; // Toglie le autofatture e le op. VA7
if (corrisp) if (corrisp)
{ {
imp_ifs += _pim->get_real("R5"); // Se corrisp. aggiunge le FS imp_ifs += _pim->get_real("R5"); // Se corrisp. aggiunge le FS
@ -4314,3 +4342,4 @@ void TLiquidazione_app::recalc_annual(const char* att)
_pla->put("S1", volaff2.string()); _pla->put("S1", volaff2.string());
_pla->rewrite(); _pla->rewrite();
} }

View File

@ -507,7 +507,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
real autodafe, autodafe_iva, art40, art40_iva; real autodafe, autodafe_iva, art40, art40_iva;
real diffimp, diffiva, diffincimp, diffinciva; real diffimp, diffiva, diffincimp, diffinciva;
real diffimp_acq, diffiva_acq, diffincimp_acq, diffinciva_acq; real diffimp_acq, diffiva_acq, diffincimp_acq, diffinciva_acq;
bool skip_acq = atts.items() == 1 && _mixed; const bool skip_acq = atts.items() == 1 && _mixed;
// descrittore riga autodafe' // descrittore riga autodafe'
_DescrItem* ads = NULL; _DescrItem* ads = NULL;
@ -534,7 +534,6 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
// aggiunti alla fine del ciclo, scorrendo tutte le righe generate. // aggiunti alla fine del ciclo, scorrendo tutte le righe generate.
TAssoc_array corr_ann; TAssoc_array corr_ann;
_CorrItem cx; _CorrItem cx;
bool is_key;
FOR_EACH_TOKEN(atts, tmpatt) FOR_EACH_TOKEN(atts, tmpatt)
{ {
@ -547,6 +546,10 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
// compute // compute
const TString80 codtab = tab->get("CODTAB"); const TString80 codtab = tab->get("CODTAB");
const TString4 anno = codtab.mid(0,4); const TString4 anno = codtab.mid(0,4);
if (anno != _year)
break; // 27-02-2014 finiamo con l'anno sbagliato!
const TString8 activity= codtab.mid(4,6); const TString8 activity= codtab.mid(4,6);
const int mese = atoi(codtab.mid(13,2)); const int mese = atoi(codtab.mid(13,2));
const int tipodet = atoi(codtab.mid(20,1)); const int tipodet = atoi(codtab.mid(20,1));
@ -588,29 +591,25 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
diffincimp_acq = tab->get_real("R32"); diffincimp_acq = tab->get_real("R32");
diffinciva_acq = tab->get_real("R33"); diffinciva_acq = tab->get_real("R33");
const bool is_rit= tipodet != 0 && month == 13 && rit_imp != 0.0; //Se fattura in ritardo con tipo detr. != 0 e si sta calcolando l'annuale const bool is_rit= tipodet != 0 && month == 13 && !rit_imp.is_zero(); //Se fattura in ritardo con tipo detr. != 0 e si sta calcolando l'annuale
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
issosp |= (sosp_imp != nessuna); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: normale, vol_affari, liquidazione) issosp |= (sosp_imp != nessuna); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: normale, vol_affari, liquidazione)
// ACHTUNG! Corrispettivi da ventileer possono ventilare // ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello
// ad un altro codiva; in tal caso si scrive quello
if (corrisp && other.full()) if (corrisp && other.full())
{ {
look_iva(other); look_iva(other);
codiva = other; codiva = other;
} }
// se e' corrispettivo da ventilare non // se e' corrispettivo da ventilare non scrivo un cannolo ripieno visto che e' stato ventilato
// scrivo un cannolo ripieno visto che e' stato ventilato
if (tipomov == vendita && tipoiva == "VE" && !describe_pis) if (tipomov == vendita && tipoiva == "VE" && !describe_pis)
continue; continue;
// se e' il dettaglio di una attivita' mista non stampa // se e' il dettaglio di una attivita' mista non stampa gli acquisti, il perche' losalamadonna
// gli acquisti, il perche' losalamadonna
if (tipomov == acquisto && skip_acq) if (tipomov == acquisto && skip_acq)
continue; continue;
// questi non vanno in liquidazione, i totali sono // questi non vanno in liquidazione, i totali sono gia' calcolati altrove
// gia' calcolati altrove
if ((tipodet == 1 || tipodet == 3 || tipodet == 9) && !is_rit) if ((tipodet == 1 || tipodet == 3 || tipodet == 9) && !is_rit)
continue; continue;
@ -631,23 +630,23 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
tab->get_real("R33").is_zero()) tab->get_real("R33").is_zero())
continue; continue;
if (activity == att && is_month_plain(mese) && _year == anno) if (activity == att && is_month_plain(mese) /*&& _year == anno*/) // commentato 27-02-2015
{ {
// vedi se c'e' gia' un item corrispondente // vedi se c'e' gia' un item corrispondente
int i; int i;
for(i = last+1; i < _descr_arr.items(); i++) for(i = last+1; i < _descr_arr.items(); i++)
{ {
_DescrItem* wd = (_DescrItem*)&_descr_arr[i]; _DescrItem& wd = (_DescrItem&)_descr_arr[i];
if (wd->_flags == PIM_PIS && wd->_s0 == ref && wd->_s1 == codiva) if (wd._flags == PIM_PIS && wd._s0 == ref && wd._s1 == codiva)
{ {
d = wd; d = &wd;
break; break;
} }
if (wd->_flags == TOT_ROW) if (wd._flags == TOT_ROW)
break; break;
if (wd->_flags == PIM_PIS && if (wd._flags == PIM_PIS &&
wd->_s0 == ref && wd._s0 == ref &&
wd->_s1 > codiva) wd._s1 > codiva)
break; break;
} }
if (d == NULL) if (d == NULL)
@ -691,7 +690,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
} }
else // vendita else // vendita
{ {
is_key = corr_ann.is_key(codiva); const bool is_key = corr_ann.is_key(codiva);
cx._totale = 0; cx._totale = 0;
_CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx; _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx;
if (sosp_imp != vol_affari) if (sosp_imp != vol_affari)
@ -861,17 +860,17 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
int j; int j;
for (j = totpos + 1; j < _descr_arr.items(); j++) for (j = totpos + 1; j < _descr_arr.items(); j++)
{ {
_DescrItem* wd = (_DescrItem*)&_descr_arr[j]; _DescrItem& wd = (_DescrItem&)_descr_arr[j];
const bool found = wd->_flags == id && wd->_s0 == ref; const bool found = wd._flags == id && wd._s0 == ref;
if (found && wd->_s1 == codiva) if (found && wd._s1 == codiva)
{ {
d = wd; d = &wd;
break; break;
} }
if (wd->_flags == TOT_ROW_DI) if (wd._flags == TOT_ROW_DI)
break; break;
if (found && wd->_s1 > codiva) if (found && wd._s1 > codiva)
break; break;
} }
if (d == NULL) if (d == NULL)
@ -1153,19 +1152,13 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
// calcola nuovo prorata per ogni attivita' (miste: 1+2) // calcola nuovo prorata per ogni attivita' (miste: 1+2)
real pr; real pr;
if (atoi(_year) > 1997) // Calcolo dal 1998 in poi const real rsa = ris - (e3-e5) - (e4-e6);
if (!rsa.is_zero())
{ {
const real rsa = ris - (e3-e5) - (e4-e6);
const real rsn = rsa - e1; const real rsn = rsa - e1;
if (!rsa.is_zero()) pr = CENTO - (rsn * CENTO / rsa); // Percentuale di indetraibilita: reciproco della percentuale di detraibilita'
pr = CENTO - (rsn * CENTO / rsa); // Percentuale di indetraibilita: reciproco della percentuale di detraibilita' pr.round(0);
} }
else
{
if (!ris.is_zero())
pr = e1 * CENTO / ris;
}
pr.round(0);
real co = 0.0; real co = 0.0;
real topay = 0.0; real topay = 0.0;
@ -1236,11 +1229,6 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem*
d->_r29 = _lim->get_real("R29"); // fdiffinc_iva_ven d->_r29 = _lim->get_real("R29"); // fdiffinc_iva_ven
d->_r33 = _lim->get_real("R33"); // fdiffinc_iva_acq d->_r33 = _lim->get_real("R33"); // fdiffinc_iva_acq
/* Dal 1998 in poi il conguaglio prorata non va stampato, ma conglobato nell'iva acquisti
if (atoi(_year) <= 1997)
d->_r10 = _lim->get_real("R7"); // totale conguaglio prorata
*/
TToken_string tt(80); TToken_string tt(80);
tt.add(_lam->get_real("R0").string()); // IVA Vendite tt.add(_lam->get_real("R0").string()); // IVA Vendite
tt.add(_lam->get_real("R1").string()); // IVA Acquisti tt.add(_lam->get_real("R1").string()); // IVA Acquisti
@ -1479,10 +1467,7 @@ void TLiquidazione_app::set_att(_DescrItem& d)
if (d._f1 == 13) if (d._f1 == 13)
{ {
if (d._s4 == "T" && !(d._f2)) // trimestrale e non benzinaro tim_title << format(FR(": Riepilogo Annuale %s"),(const char*)_year);
tim_title << format(FR(": Riepilogo Annuale %s"),(const char*)_year);
else
tim_title << format(FR(": Dichiarazione Annuale %s"),(const char*)_year);
} }
else else
{ {
@ -1634,6 +1619,7 @@ void TLiquidazione_app::set_liqacc_1999(_DescrItem& d)
int TLiquidazione_app::calc_inc_diff(int tipoiva, real& imponibile_diff, real& imposta_diff, real& imponibile_xcas, real& imposta_xcas) const int TLiquidazione_app::calc_inc_diff(int tipoiva, real& imponibile_diff, real& imposta_diff, real& imponibile_xcas, real& imposta_xcas) const
{ {
CHECKD(tipoiva == 1 || tipoiva == 2, "Bad tipo iva:", tipoiva);
int flag = 0; int flag = 0;
imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO; imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO;
@ -1649,10 +1635,14 @@ int TLiquidazione_app::calc_inc_diff(int tipoiva, real& imponibile_diff, real& i
for (bool ok = id.move_first(); ok; ok = id.move_next()) for (bool ok = id.move_first(); ok; ok = id.move_next())
{ {
const real iva = rec.get_real(RMI_IMPOSTA); const real iva = rec.get_real(RMI_IMPOSTA);
if (!iva.is_zero()) const real imp = rec.get_real(RMI_IMPONIBILE);
if (!iva.is_zero() || !imp.is_zero())
{ {
#ifdef DBG
if (iva.is_zero() && !imp.is_zero())
int cazzonga = 1;
#endif
const int tipodiff = rec.get_int("TIPODIFF"); const int tipodiff = rec.get_int("TIPODIFF");
const real imp = rec.get_real(RMI_IMPONIBILE);
switch (tipodiff) switch (tipodiff)
{ {
case 1: imponibile_diff += imp; imposta_diff += iva; break; case 1: imponibile_diff += imp; imposta_diff += iva; break;

View File

@ -134,9 +134,29 @@ bool gestione_IVAxCassa(const TDate& data_mov, long firm)
return yes; return yes;
} }
static bool mov_has_imposte(const TRectype& mov)
{
const char tipocf = mov.get_char(MOV_TIPO);
if (tipocf == 'C' || tipocf == 'F')
{
tipo_movimento tm = (tipo_movimento)mov.get_int(MOV_TIPOMOV);
if (tm == tm_nessuno)
{
const TString& tipodoc = mov.get(MOV_TIPODOC);
if (tipodoc == "FV" || tipodoc == "FA")
tm = tm_fattura; else
if (tipodoc == "NC")
tm = tm_nota_credito;
}
return tm == tm_fattura || tm == tm_nota_credito;
}
return false;
}
bool is_split_payment(const TRectype& mov) bool is_split_payment(const TRectype& mov)
{ {
if (mov.get_char(MOV_TIPO) == 'C' && mov.get_int(MOV_ANNOIVA) >= 2015 && mov.get_real(MOV_RITFIS).is_zero()) if (mov_has_imposte(mov) && mov.get_int(MOV_ANNOIVA) >= 2015 && mov.get_real(MOV_RITFIS).is_zero())
{ {
const TRectype& clifo = cache().get_rec(LF_CLIFO, "C", mov.get(MOV_CODCF)); const TRectype& clifo = cache().get_rec(LF_CLIFO, "C", mov.get(MOV_CODCF));
if (clifo.get_bool(CLI_SPLITPAY)) // Ente pubblico con split payment if (clifo.get_bool(CLI_SPLITPAY)) // Ente pubblico con split payment
@ -150,21 +170,25 @@ bool is_split_payment(const TRectype& mov)
return false; return false;
} }
bool is_IVA_diff(const TRectype& mov)
{
if (!mov.get_bool(MOV_LIQDIFF) || mov.get_bool(MOV_IVAXCASSA))
return false;
return mov_has_imposte(mov) && !is_split_payment(mov);
}
bool is_IVAxCassa(const TRectype& mov) bool is_IVAxCassa(const TRectype& mov)
{ {
if (mov.get_bool(MOV_LIQDIFF) || !mov.get_bool(MOV_IVAXCASSA) || mov.get_char(MOV_TIPO) < 'C') if (mov.get_bool(MOV_LIQDIFF) || !mov.get_bool(MOV_IVAXCASSA))
return false; return false;
tipo_movimento tm = (tipo_movimento)mov.get_int(MOV_TIPOMOV); if (!mov_has_imposte(mov))
if (tm == tm_nessuno) return false;
{
const TString& tipodoc = mov.get(MOV_TIPODOC); const TDate data_reg = mov.get(MOV_DATAREG);
if (tipodoc == "FV" || tipodoc == "FA") const TDate data_doc = mov.get(MOV_DATADOC);
tm = tm_fattura; else const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg;
if (tipodoc == "NC") if (!gestione_IVAxCassa(data_rif))
tm = tm_nota_credito;
}
if (tm != tm_fattura && tm != tm_nota_credito)
return false; return false;
const TRectype& clifo = cache().get_rec(LF_CLIFO, mov.get(MOV_TIPO), mov.get(MOV_CODCF)); const TRectype& clifo = cache().get_rec(LF_CLIFO, mov.get(MOV_TIPO), mov.get(MOV_CODCF));
@ -186,7 +210,7 @@ bool is_IVAxCassa(const TRectype& mov)
if (paiv.full()) if (paiv.full())
alleg = 0; // Falso allarme: NON è un privato avendo partita IVA alleg = 0; // Falso allarme: NON è un privato avendo partita IVA
} }
if (alleg == 7 || (clifo.get_bool(CLI_SPLITPAY) && is_split_payment(mov))) if ((alleg == 7 || alleg == 4) && is_split_payment(mov))
{ {
return false; return false;
} }
@ -196,10 +220,7 @@ bool is_IVAxCassa(const TRectype& mov)
return false; return false;
} }
const TDate data_reg = mov.get(MOV_DATAREG); return true;
const TDate data_doc = mov.get(MOV_DATADOC);
const TDate data_rif = data_doc.ok() && data_doc < data_reg ? data_doc : data_reg;
return gestione_IVAxCassa(data_rif);
} }

View File

@ -159,6 +159,7 @@ int get_tipodet_from_rmi(const TRectype& rmi, const TRectype& mv, real& percind,
bool gestione_IVAxCassa(const TDate& data, long firm = 0); bool gestione_IVAxCassa(const TDate& data, long firm = 0);
bool is_split_payment(const TRectype& mov); bool is_split_payment(const TRectype& mov);
bool is_IVA_diff(const TRectype& mov);
bool is_IVAxCassa(const TRectype& mov); bool is_IVAxCassa(const TRectype& mov);
#endif #endif

View File

@ -792,20 +792,25 @@ int TRiga_partite::ultima_ratapagata() const
// Certified 100% // Certified 100%
tipo_movimento TRiga_partite::tipo() const tipo_movimento TRiga_partite::tipo() const
{ {
tipo_movimento tm = (tipo_movimento)(get_int(PART_TIPOMOV)); tipo_movimento tm = (tipo_movimento)get_int(PART_TIPOMOV);
if (tm == tm_nessuno) if (tm == tm_nessuno)
{ {
// Tento salvataggioin extremis // Tento salvataggioin extremis
const int nriga = get_int(PART_NRIGA); const int nriga = get_int(PART_NRIGA);
if (nriga == 1 && get_date(PART_DATADOC).ok()) if (nriga != TPartita::UNASSIGNED)
tm = tm_fattura; else {
if (nriga > 1 && get_date(PART_DATAPAG).ok()) if (get_date(PART_DATAPAG).ok())
tm = tm_pagamento; tm = tm_pagamento; else
#ifdef DBG if (get_date(PART_DATADOC).ok())
if (tm == tm_nessuno && nriga != TPartita::UNASSIGNED) tm = tm_fattura;
yesnofatal_box("Riga partite con un tipo losco."); #ifdef DBG
#endif else
yesnofatal_box("Riga partite %c%ld %d/%s : %d con un tipo losco.",
get_char(PART_TIPOCF), get_long(PART_SOTTOCONTO),
get_int(PART_ANNO), (const char*)get(PART_NUMPART), nriga);
#endif
}
} }
return tm; return tm;

View File

@ -1,3 +1,3 @@
29 29
0 0
$scad|0|0|218|0|Scadenze|NPART*2|| $scad|0|0|224|0|Scadenze|NPART*2||

View File

@ -1,5 +1,5 @@
29 29
29 30
ANNO|2|4|0|Anno ANNO|2|4|0|Anno
NUMPART|1|7|0|Numero partita NUMPART|1|7|0|Numero partita
NRIGA|2|4|0|Numero riga NRIGA|2|4|0|Numero riga
@ -27,6 +27,7 @@ CODABI|10|5|0|Codice ABI
CODCAB|10|5|0|Codice CAB CODCAB|10|5|0|Codice CAB
CODAG|1|5|0|Codice agente CODAG|1|5|0|Codice agente
BLOCCATA|8|1|0|Scadenza non pagabile (bloccata) solo acquisti BLOCCATA|8|1|0|Scadenza non pagabile (bloccata) solo acquisti
MOTIVO|1|6|0|Motivo del blocco
TNRIGA|2|4|0|Numero temporaneo di riga partita TNRIGA|2|4|0|Numero temporaneo di riga partita
TNRATA|2|4|0|Numero temporaneo di rata TNRATA|2|4|0|Numero temporaneo di rata
2 2