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 <execp.h>
|
||||
#include <modaut.h>
|
||||
#include <tabutil.h>
|
||||
#include <printer.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
|
||||
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;
|
||||
int i;
|
||||
|
||||
for (i = pag.n_rate()-1; i >= 0; i--)
|
||||
for (int i = nr-1; i >= 0; i--)
|
||||
{
|
||||
if (in_valuta)
|
||||
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_SPESE, totspese.get_num());
|
||||
|
||||
newgame->scollega_pagamenti(nuova_riga); // Sempre meglio che perderli, ma andrebbero ricollegati
|
||||
partita.elimina_rata(-1); // Elimina tutte le rate eventuali
|
||||
// Se sto ricontabilizzando meno rate di quante esistevano prima!
|
||||
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)),
|
||||
abi(doc.get(DOC_CODABIA)), cab(doc.get(DOC_CODCABA));
|
||||
|
||||
const int nr = pag.n_rate();
|
||||
const TString16 codpag(head.get(MOV_CODPAG));
|
||||
for (i = 0; i < nr; i++)
|
||||
const TString8 codpag(head.get(MOV_CODPAG));
|
||||
|
||||
for (int 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_CODAG, agente); // Codice agente
|
||||
@ -3084,7 +3088,8 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
|
||||
// Aggiorno subito i saldi
|
||||
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);
|
||||
|
||||
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)
|
||||
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)
|
||||
movimento.remove(); // Se si è verificato un errore nella scrittura dell'anticipo rimuove il movimento di prima nota
|
||||
}
|
||||
|
||||
if (good())
|
||||
{
|
||||
@ -3374,45 +3381,16 @@ error_type TContabilizzazione::compile_rows_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();
|
||||
TString numpart(mov.get(MOV_NUMDOC)); // Nessun controllo se prot.iva o numdoc xche' tanto proviene dal mov precedentemente scritto
|
||||
TPartita * partita = new TPartita(_co_cliente,anno,numpart);
|
||||
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());
|
||||
|
||||
const long numreg = mov.get_long(MOV_NUMREG);
|
||||
const TString16 numpart(mov.get(MOV_NUMDOC)); // Nessun controllo se prot.iva o numdoc xche' tanto proviene dal mov precedentemente scritto
|
||||
|
||||
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));
|
||||
TPartita* partita = new TPartita(_co_cliente,anno,numpart);
|
||||
partita->allinea();
|
||||
|
||||
// Compila la riga di pagamento:
|
||||
// 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
|
||||
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;
|
||||
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
|
||||
// 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;
|
||||
const int nrate = rpp.rate();
|
||||
const bool is_saldo_doc = doc.get_bool(DOC_ACCSALDO);
|
||||
char s_a;
|
||||
char s_a = 'A';
|
||||
for (int i=1; i<=nrate; i++)
|
||||
{
|
||||
TRiga_scadenze& rs = rpp.rata(i);
|
||||
|
@ -1463,7 +1463,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
|
||||
|
||||
if (browse )
|
||||
{
|
||||
const TCursor * cur = browse->cursor();
|
||||
const TCursor* cur = browse->cursor();
|
||||
if (cur)
|
||||
{
|
||||
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();
|
||||
TToken_string & row = sf->row(curr_row);
|
||||
const TString16 old_tipo_riga = docmask.doc()[curr_row + 1].get(RDOC_TIPORIGA);
|
||||
const TString16 tipo_riga = f.get();
|
||||
const TString4 old_tipo_riga = docmask.doc()[curr_row + 1].get(RDOC_TIPORIGA);
|
||||
const TString4 tipo_riga = f.get();
|
||||
|
||||
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);
|
||||
sf->post_insert(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);
|
||||
}
|
||||
else
|
||||
{
|
||||
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)
|
||||
{
|
||||
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_UMQTA2, !artmag);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user