Corretta ricontabilizzazione fatture aventi pagamenti già effettuati (soprattutto anticipi)
git-svn-id: svn://10.65.10.50/branches/R_10_00@22715 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2180d9f27f
commit
065f1c7ea7
124
ve/velib04b.cpp
124
ve/velib04b.cpp
@ -1,8 +1,5 @@
|
|||||||
#include <diction.h>
|
|
||||||
#include <dongle.h>
|
#include <dongle.h>
|
||||||
#include <execp.h>
|
#include <execp.h>
|
||||||
#include <modaut.h>
|
|
||||||
#include <tabutil.h>
|
|
||||||
#include <printer.h>
|
#include <printer.h>
|
||||||
#include <viswin.h>
|
#include <viswin.h>
|
||||||
|
|
||||||
@ -2863,11 +2860,11 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
|
|||||||
// Crea una rimessa diretta con la data del documento per il valore dell'anticipo
|
// Crea una rimessa diretta con la data del documento per il valore dell'anticipo
|
||||||
pag.set_rata(0, in_valuta ? anticipo.get_num() : ZERO, anticipo_base.get_num(), first_date, 1, "", false);
|
pag.set_rata(0, in_valuta ? anticipo.get_num() : ZERO, anticipo_base.get_num(), first_date, 1, "", false);
|
||||||
}
|
}
|
||||||
|
const int nr = pag.n_rate();
|
||||||
|
|
||||||
real imponibile, imponibile_val;
|
real imponibile, imponibile_val;
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = pag.n_rate()-1; i >= 0; i--)
|
for (int i = nr-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (in_valuta)
|
if (in_valuta)
|
||||||
imponibile_val += pag.tval_rata(i);
|
imponibile_val += pag.tval_rata(i);
|
||||||
@ -2878,17 +2875,24 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
|
|||||||
partita.put(PART_IMPOSTA, imposte);
|
partita.put(PART_IMPOSTA, imposte);
|
||||||
partita.put(PART_SPESE, totspese.get_num());
|
partita.put(PART_SPESE, totspese.get_num());
|
||||||
|
|
||||||
newgame->scollega_pagamenti(nuova_riga); // Sempre meglio che perderli, ma andrebbero ricollegati
|
// Se sto ricontabilizzando meno rate di quante esistevano prima!
|
||||||
partita.elimina_rata(-1); // Elimina tutte le rate eventuali
|
if (nr < partita.rate())
|
||||||
|
{
|
||||||
|
// Collega eventuali pagamenti. Smpre meglio che perderli
|
||||||
|
newgame->scollega_pagamenti(nuova_riga, nr+1);
|
||||||
|
// Elimina tutte le rate in eccesso
|
||||||
|
for (int i = partita.rate(); i > nr; i--)
|
||||||
|
partita.elimina_rata(i);
|
||||||
|
}
|
||||||
|
|
||||||
const TString8 abipr(doc.get(DOC_CODABIP)), cabpr(doc.get(DOC_CODCABP)),
|
const TString8 abipr(doc.get(DOC_CODABIP)), cabpr(doc.get(DOC_CODCABP)),
|
||||||
abi(doc.get(DOC_CODABIA)), cab(doc.get(DOC_CODCABA));
|
abi(doc.get(DOC_CODABIA)), cab(doc.get(DOC_CODCABA));
|
||||||
|
const TString8 codpag(head.get(MOV_CODPAG));
|
||||||
const int nr = pag.n_rate();
|
|
||||||
const TString16 codpag(head.get(MOV_CODPAG));
|
for (int i = 0; i < nr; i++)
|
||||||
for (i = 0; i < nr; i++)
|
|
||||||
{
|
{
|
||||||
TRiga_scadenze& scadenza = partita.new_row();
|
TRiga_scadenze* prs = i < partita.rate() ? &partita.rata(i+1) : &partita.new_row(i+1);
|
||||||
|
TRiga_scadenze& scadenza = *prs;
|
||||||
|
|
||||||
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
|
||||||
@ -3084,7 +3088,8 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
|
|||||||
// Aggiorno subito i saldi
|
// Aggiorno subito i saldi
|
||||||
aggiorna_saldi(saldo, movimento, true);
|
aggiorna_saldi(saldo, movimento, true);
|
||||||
|
|
||||||
if (sc_enabled(head.get_date(MOV_DATAREG)))
|
const bool has_sc = sc_enabled(head.get_date(MOV_DATAREG));
|
||||||
|
if (has_sc)
|
||||||
write_scadenze(doc);
|
write_scadenze(doc);
|
||||||
|
|
||||||
if (good() && in_enabled())
|
if (good() && in_enabled())
|
||||||
@ -3099,9 +3104,11 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
|
|||||||
if (good() && dongle().active(M77AUT) && do_770)
|
if (good() && dongle().active(M77AUT) && do_770)
|
||||||
write_percip(doc, movimento);
|
write_percip(doc, movimento);
|
||||||
|
|
||||||
if (doc.get_real(DOC_IMPPAGATO) != ZERO)
|
if (has_sc && !doc.get_real(DOC_IMPPAGATO).is_zero())
|
||||||
|
{
|
||||||
if (write_anticipo(doc) != no_error)
|
if (write_anticipo(doc) != no_error)
|
||||||
movimento.remove(); // Se si è verificato un errore nella scrittura dell'anticipo rimuove il movimento di prima nota
|
movimento.remove(); // Se si è verificato un errore nella scrittura dell'anticipo rimuove il movimento di prima nota
|
||||||
|
}
|
||||||
|
|
||||||
if (good())
|
if (good())
|
||||||
{
|
{
|
||||||
@ -3374,45 +3381,16 @@ error_type TContabilizzazione::compile_rows_anticipo(TDocumento& doc)
|
|||||||
|
|
||||||
error_type TContabilizzazione::write_pagamento_anticipo(TDocumento& doc)
|
error_type TContabilizzazione::write_pagamento_anticipo(TDocumento& doc)
|
||||||
{
|
{
|
||||||
TLocalisamfile& mov = _anticipo->lfile();
|
const TRectype& mov = _anticipo->curr();
|
||||||
const int anno = mov.get_date(MOV_DATAREG).year();
|
const int anno = mov.get_date(MOV_DATAREG).year();
|
||||||
TString numpart(mov.get(MOV_NUMDOC)); // Nessun controllo se prot.iva o numdoc xche' tanto proviene dal mov precedentemente scritto
|
const long numreg = mov.get_long(MOV_NUMREG);
|
||||||
TPartita * partita = new TPartita(_co_cliente,anno,numpart);
|
const TString16 numpart(mov.get(MOV_NUMDOC)); // Nessun controllo se prot.iva o numdoc xche' tanto proviene dal mov precedentemente scritto
|
||||||
partita->allinea();
|
|
||||||
TRiga_partite& riga_part = partita->new_row();
|
|
||||||
// Compila la riga di partita per il pagamento
|
|
||||||
riga_part.put(PART_TIPOMOV,_caus->tipomov());
|
|
||||||
riga_part.put(PART_TIPOPAG, 1 ); // Pagamento in contanti-> tipo 1
|
|
||||||
riga_part.put(PART_NREG,mov.get_long(MOV_NUMREG));
|
|
||||||
riga_part.put(PART_NUMRIG,1); // Riferimento alla riga 1 del movimento
|
|
||||||
riga_part.put(PART_DATAREG,mov.get_date(MOV_DATAREG));
|
|
||||||
riga_part.put(PART_DATADOC,mov.get_date(MOV_DATADOC));
|
|
||||||
riga_part.put(PART_DATAPAG,mov.get_date(MOV_DATADOC));
|
|
||||||
riga_part.put(PART_NUMDOC,numpart); // E' lo stesso riferimento
|
|
||||||
riga_part.put(PART_SEZ,sezione());
|
|
||||||
riga_part.put(PART_CODCAUS, _caus->codice());
|
|
||||||
|
|
||||||
|
|
||||||
TCurrency_documento impval(doc.get_real(DOC_IMPPAGATO), doc);
|
TPartita* partita = new TPartita(_co_cliente,anno,numpart);
|
||||||
TCurrency_documento imp(impval); imp.change_to_firm_val();
|
partita->allinea();
|
||||||
real cambio = doc.get_real(DOC_CAMBIO);
|
|
||||||
TString16 val(doc.get(DOC_CODVAL));
|
|
||||||
TDate datacam(doc.get_date(DOC_DATACAMBIO));
|
|
||||||
const bool valuta = val.not_empty();
|
|
||||||
riga_part.put(PART_IMPORTO,imp.get_num());
|
|
||||||
riga_part.put(PART_IMPORTOVAL,impval.get_num());
|
|
||||||
riga_part.put(PART_IMPTOTDOC,imp.get_num());
|
|
||||||
riga_part.put(PART_IMPTOTVAL,impval.get_num());
|
|
||||||
riga_part.put(PART_CODVAL,val);
|
|
||||||
riga_part.put(PART_CAMBIO,cambio);
|
|
||||||
riga_part.put(PART_DATACAM,doc.get_date(DOC_DATACAMBIO));
|
|
||||||
riga_part.put(PART_TIPOCF,_co_cliente.tipo());
|
|
||||||
riga_part.put(PART_SOTTOCONTO,_co_cliente.sottoconto());
|
|
||||||
riga_part.put(PART_DESCR, mov.get(MOV_DESCR));
|
|
||||||
|
|
||||||
// Compila la riga di pagamento:
|
|
||||||
// reperire il numero della riga partita (nrigp) appena aggiunta
|
// reperire il numero della riga partita (nrigp) appena aggiunta
|
||||||
int nriga = (int) TPartita::UNASSIGNED, nrigp = riga_part.get_int(PART_NRIGA);
|
int nriga = (int) TPartita::UNASSIGNED;
|
||||||
// Cerca la riga di partita con riferimento alla fattura che si sta pagando
|
// Cerca la riga di partita con riferimento alla fattura che si sta pagando
|
||||||
for (int r = partita->last(); r > 0; r = partita->pred(r))
|
for (int r = partita->last(); r > 0; r = partita->pred(r))
|
||||||
{
|
{
|
||||||
@ -3434,6 +3412,52 @@ error_type TContabilizzazione::write_pagamento_anticipo(TDocumento& doc)
|
|||||||
delete partita;
|
delete partita;
|
||||||
return write_part_error;
|
return write_part_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nrigp = partita->primo_pagamento(numreg);
|
||||||
|
if (nrigp > 0)
|
||||||
|
{
|
||||||
|
const TRiga_partite& rfatt = partita->riga(nriga);
|
||||||
|
for (int r = rfatt.rate(); r > 0; r--)
|
||||||
|
partita->elimina_pagamento(nriga, r, nrigp);
|
||||||
|
partita->elimina_pagamento(TPartita::UNASSIGNED, TPartita::UNASSIGNED, nrigp);
|
||||||
|
if (partita->esiste(nrigp)) // Non dovrebbe succedere mai
|
||||||
|
nrigp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cerco di riutilizzare lo stesso nrigp della eventuale contabilizzazione precedente
|
||||||
|
TRiga_partite& riga_part = partita->new_row(nrigp);
|
||||||
|
nrigp = riga_part.get_int(PART_NRIGA);
|
||||||
|
|
||||||
|
// Compila la riga di partita per il pagamento
|
||||||
|
riga_part.put(PART_TIPOMOV,_caus->tipomov());
|
||||||
|
riga_part.put(PART_TIPOPAG, 1 ); // Pagamento in contanti-> tipo 1
|
||||||
|
riga_part.put(PART_NREG, numreg);
|
||||||
|
riga_part.put(PART_NUMRIG,1); // Riferimento alla riga 1 del movimento
|
||||||
|
riga_part.put(PART_DATAREG, mov.get_date(MOV_DATAREG));
|
||||||
|
riga_part.put(PART_DATADOC, mov.get_date(MOV_DATADOC));
|
||||||
|
riga_part.put(PART_DATAPAG, mov.get_date(MOV_DATADOC));
|
||||||
|
riga_part.put(PART_NUMDOC, numpart); // E' lo stesso riferimento
|
||||||
|
riga_part.put(PART_SEZ, sezione());
|
||||||
|
riga_part.put(PART_CODCAUS, _caus->codice());
|
||||||
|
|
||||||
|
TCurrency_documento impval(doc.get_real(DOC_IMPPAGATO), doc);
|
||||||
|
TCurrency_documento imp(impval); imp.change_to_firm_val();
|
||||||
|
real cambio = doc.get_real(DOC_CAMBIO);
|
||||||
|
TString16 val(doc.get(DOC_CODVAL));
|
||||||
|
TDate datacam(doc.get_date(DOC_DATACAMBIO));
|
||||||
|
const bool valuta = val.not_empty();
|
||||||
|
riga_part.put(PART_IMPORTO,imp.get_num());
|
||||||
|
riga_part.put(PART_IMPORTOVAL,impval.get_num());
|
||||||
|
riga_part.put(PART_IMPTOTDOC,imp.get_num());
|
||||||
|
riga_part.put(PART_IMPTOTVAL,impval.get_num());
|
||||||
|
riga_part.put(PART_CODVAL,val);
|
||||||
|
riga_part.put(PART_CAMBIO,cambio);
|
||||||
|
riga_part.put(PART_DATACAM,doc.get_date(DOC_DATACAMBIO));
|
||||||
|
riga_part.put(PART_TIPOCF,_co_cliente.tipo());
|
||||||
|
riga_part.put(PART_SOTTOCONTO,_co_cliente.sottoconto());
|
||||||
|
riga_part.put(PART_DESCR, mov.get(MOV_DESCR));
|
||||||
|
|
||||||
|
// Compila la riga di pagamento:
|
||||||
|
|
||||||
// Scorre le scadenze di questa fattura, e ne completa il pagamento partendo
|
// Scorre le scadenze di questa fattura, e ne completa il pagamento partendo
|
||||||
// dalla rata piu' vecchia.
|
// dalla rata piu' vecchia.
|
||||||
@ -3445,7 +3469,7 @@ error_type TContabilizzazione::write_pagamento_anticipo(TDocumento& doc)
|
|||||||
TImporto old_abb, old_diffcam, new_abb, new_diffcam;
|
TImporto old_abb, old_diffcam, new_abb, new_diffcam;
|
||||||
const int nrate = rpp.rate();
|
const int nrate = rpp.rate();
|
||||||
const bool is_saldo_doc = doc.get_bool(DOC_ACCSALDO);
|
const bool is_saldo_doc = doc.get_bool(DOC_ACCSALDO);
|
||||||
char s_a;
|
char s_a = 'A';
|
||||||
for (int i=1; i<=nrate; i++)
|
for (int i=1; i<=nrate; i++)
|
||||||
{
|
{
|
||||||
TRiga_scadenze& rs = rpp.rata(i);
|
TRiga_scadenze& rs = rpp.rata(i);
|
||||||
|
@ -1463,7 +1463,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
|
|||||||
|
|
||||||
if (browse )
|
if (browse )
|
||||||
{
|
{
|
||||||
const TCursor * cur = browse->cursor();
|
const TCursor* cur = browse->cursor();
|
||||||
if (cur)
|
if (cur)
|
||||||
{
|
{
|
||||||
const int num = cur->file().num();
|
const int num = cur->file().num();
|
||||||
|
@ -615,8 +615,8 @@ bool tipo_riga_handler(TMask_field& f, KEY key)
|
|||||||
{
|
{
|
||||||
const int curr_row = sf->selected();
|
const int curr_row = sf->selected();
|
||||||
TToken_string & row = sf->row(curr_row);
|
TToken_string & row = sf->row(curr_row);
|
||||||
const TString16 old_tipo_riga = docmask.doc()[curr_row + 1].get(RDOC_TIPORIGA);
|
const TString4 old_tipo_riga = docmask.doc()[curr_row + 1].get(RDOC_TIPORIGA);
|
||||||
const TString16 tipo_riga = f.get();
|
const TString4 tipo_riga = f.get();
|
||||||
|
|
||||||
if (old_tipo_riga != tipo_riga)
|
if (old_tipo_riga != tipo_riga)
|
||||||
{
|
{
|
||||||
@ -625,12 +625,15 @@ bool tipo_riga_handler(TMask_field& f, KEY key)
|
|||||||
docmask.doc()[curr_row + 1].set_tipo(tipo_riga);
|
docmask.doc()[curr_row + 1].set_tipo(tipo_riga);
|
||||||
sf->post_insert(curr_row);
|
sf->post_insert(curr_row);
|
||||||
sf->check_row(curr_row);
|
sf->check_row(curr_row);
|
||||||
|
|
||||||
|
const TTipo_riga_documento t(tipo_riga);
|
||||||
|
t.set_defaults(*sf, curr_row + 1);
|
||||||
sf->force_update(curr_row);
|
sf->force_update(curr_row);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
f.set(old_tipo_riga);
|
f.set(old_tipo_riga);
|
||||||
return f.error_box("Impossibile cambiare il tipo nella maschera di riga");
|
return f.error_box(TR("Impossibile cambiare il tipo nella maschera di riga"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1882,7 +1885,8 @@ bool codartmag_handler( TMask_field& f, KEY key )
|
|||||||
|
|
||||||
if (key == K_TAB)
|
if (key == K_TAB)
|
||||||
{
|
{
|
||||||
const bool artmag = !f.empty() && TRiga_documento::tipo(m.get(FR_TIPORIGA)).is_merce();
|
// const bool artmag = !f.empty() && TRiga_documento::tipo(m.get(FR_TIPORIGA)).is_merce();
|
||||||
|
const bool artmag = !f.empty() && !cache().get(LF_ANAMAG, f.get()).empty();
|
||||||
m.show(FR_UMQTA, artmag);
|
m.show(FR_UMQTA, artmag);
|
||||||
m.show(FR_UMQTA2, !artmag);
|
m.show(FR_UMQTA2, !artmag);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user