Patch level : 10.0 218
Files correlati : ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento : Contabilizzazione schede percipiente git-svn-id: svn://10.65.10.50/trunk@18167 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d69a5b2854
commit
fff659f797
241
ve/velib04b.cpp
241
ve/velib04b.cpp
@ -29,6 +29,10 @@
|
||||
#include "../in/inlib01.h"
|
||||
#include "../mg/anamag.h"
|
||||
#include "../ca/movana.h"
|
||||
#include "../m770/scperc.h"
|
||||
#include "../m770/rpag.h"
|
||||
#include "../m770/rver.h"
|
||||
#include "../m770/perc.h"
|
||||
|
||||
#include <comuni.h>
|
||||
#include <unloc.h>
|
||||
@ -2787,7 +2791,13 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
|
||||
if (good() && (dongle().active(CMAUT) || dongle().active(CAAUT)))
|
||||
write_anal(doc, movimento);
|
||||
|
||||
if (doc.get_real(DOC_IMPPAGATO) != ZERO)
|
||||
const int tipocoll = _caus->link_m770();
|
||||
const bool do_770 = tipocoll == 1 || tipocoll == 5 || tipocoll == 6;
|
||||
|
||||
if (good() && dongle().active(M77AUT) && do_770)
|
||||
write_percip(doc, movimento);
|
||||
|
||||
if (doc.get_real(DOC_IMPPAGATO) != ZERO)
|
||||
if (write_anticipo(doc) != no_error)
|
||||
movimento.remove(); // Se si è verificato un errore nella scrittura dell'anticipo rimuove il movimento di prima nota
|
||||
|
||||
@ -3530,6 +3540,229 @@ error_type TContabilizzazione::write_anal(TDocumento& doc, const TMovimentoPN& m
|
||||
return _error;
|
||||
}
|
||||
|
||||
error_type TContabilizzazione::write_percip(TDocumento& doc, const TMovimentoPN& movimento)
|
||||
{
|
||||
const char tipopercip = doc.clifor().get_char(CLI_TIPOAPER);
|
||||
const long codpercip = doc.clifor().get_long(CLI_CODANAGPER);
|
||||
|
||||
if (codpercip > 0L)
|
||||
{
|
||||
TBit_array to_delete;
|
||||
TArray schede;
|
||||
TLocalisamfile schperc(LF_SCPERC);
|
||||
TLocalisamfile rpag(LF_RPAG);
|
||||
TLocalisamfile rver(LF_RVER);
|
||||
TLocalisamfile perc(LF_PERC);
|
||||
const long numreg = movimento.lfile().get_long(MOV_NUMREG);
|
||||
int numsch = 0;
|
||||
|
||||
schperc.setkey(3);
|
||||
schperc.put(SCH_CODDITTA, prefix().firm().codice());
|
||||
schperc.put(SCH_NUMREG, numreg);
|
||||
|
||||
TRectype schcmp(schperc.curr());
|
||||
int err;
|
||||
|
||||
for (err = schperc.read(_isgteq); err == NOERR && schperc.curr() == schcmp; err = schperc.next())
|
||||
{
|
||||
schede.add(schperc.curr());
|
||||
to_delete.set(numsch++);
|
||||
}
|
||||
|
||||
bool changed_percip = (numsch == 0) || (tipopercip != ((TRectype &) schede[0]).get_char(SCH_TIPOA)) ||
|
||||
(codpercip != ((TRectype &) schede[0]).get_long(SCH_CODANAGR));
|
||||
int newprog = 0L;
|
||||
const int orig_numsch = numsch;
|
||||
const int doc_rows = doc.physical_rows();
|
||||
int i = 1;
|
||||
|
||||
schperc.setkey(1);
|
||||
schperc.zero();
|
||||
schperc.put(SCH_CODDITTA, prefix().firm().codice());
|
||||
schperc.put(SCH_TIPOA, tipopercip);
|
||||
schperc.put(SCH_CODANAGR, codpercip);
|
||||
schcmp = schperc.curr();
|
||||
schperc.put(SCH_NPROG, 9999);
|
||||
if (schperc.read(_isgteq) == NOERR)
|
||||
schperc.prev();
|
||||
if (schperc.curr() == schcmp)
|
||||
newprog = schperc.get_int(SCH_NPROG);
|
||||
newprog++;
|
||||
for (i = 1; i <= doc_rows; i++)
|
||||
{
|
||||
const TRiga_documento & row = doc[i];
|
||||
|
||||
if (row.is_spese())
|
||||
{
|
||||
const TSpesa_prest & sp = row.spesa();
|
||||
|
||||
if (sp.tipo_ritenuta() == 'F')
|
||||
{
|
||||
const int caus_770 = sp.caus_770();
|
||||
|
||||
if (caus_770 > 0)
|
||||
{
|
||||
TString val ;
|
||||
bool found = false;
|
||||
int j = 0;
|
||||
int recpos = -1;
|
||||
|
||||
val.format("%02d", caus_770);
|
||||
if (!changed_percip)
|
||||
for (j = 0; recpos < 0 && j < numsch; j++)
|
||||
{
|
||||
TRectype & rec = (TRectype &) schede[j];
|
||||
if (val == rec.get(SCH_CODCAUS))
|
||||
recpos = j;
|
||||
}
|
||||
|
||||
TRectype * schrow = NULL;
|
||||
bool reset_row = false;
|
||||
|
||||
if (recpos >= 0)
|
||||
schrow = (TRectype *) schede.objptr(recpos);
|
||||
else
|
||||
{
|
||||
schrow = new TRectype(LF_SCPERC);
|
||||
schrow->put(SCH_CODDITTA, prefix().firm().codice());
|
||||
schrow->put(SCH_TIPOA, tipopercip);
|
||||
schrow->put(SCH_CODANAGR, codpercip);
|
||||
schrow->put(SCH_NPROG, newprog++);
|
||||
schrow->put(SCH_NUMREG, numreg);
|
||||
schede.add(schrow);
|
||||
recpos = numsch++;
|
||||
}
|
||||
const TRectype & rec_caus = cache().get("%CA7", val);
|
||||
|
||||
schrow->put(SCH_CODCAUS, val);
|
||||
const TDate datarif = doc.get_date(DOC_DATADOCRIF);
|
||||
schrow->put(SCH_DATADOC, datarif);
|
||||
const TString & docnum = doc.get(DOC_NUMDOCRIF);
|
||||
schrow->put(SCH_NUMDOC, docnum);
|
||||
|
||||
const real ritenuta = doc.ritenute('F');
|
||||
const real spese = doc.get_real("SP770");
|
||||
|
||||
schrow->put(SCH_COMPENSO, doc.imponibile() - spese);
|
||||
schrow->put(SCH_SPESE, spese);
|
||||
schrow->put(SCH_IVA, doc.imposta());
|
||||
schrow->put(SCH_TOTALE, doc.totale_doc());
|
||||
schrow->put(SCH_TOTRIT, ritenuta);
|
||||
schrow->put(SCH_RITSOC, doc.ritenute('S'));
|
||||
const TDate datadoc = doc.get_date(DOC_DATADOC);
|
||||
schrow->put(SCH_MESEC, datadoc.month());
|
||||
schrow->put(SCH_ANNOC, datadoc.year());
|
||||
schrow->put(SCH_CAUSQUA, rec_caus.get("S1"));
|
||||
schrow->put(SCH_FLAGTS, rec_caus.get("S4"));
|
||||
// i pagamenti non sono gestiti qui per ora
|
||||
to_delete.reset(recpos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
err = NOERR;
|
||||
for (i = 0; err == NOERR && i < numsch; i++)
|
||||
{
|
||||
TRectype & rec = (TRectype &) schede[i];
|
||||
const char tipo = rec.get_char(SCH_TIPOA);
|
||||
const long codanagr = rec.get_long(SCH_CODANAGR);
|
||||
|
||||
if (to_delete[i])
|
||||
{
|
||||
TToken_string msg(256, '.');
|
||||
const int nprog = rec.get_int(SCH_NPROG);
|
||||
|
||||
msg.format("Sono state eliminate le righe di pagamento e versamento relative alla scheda %c/%ld/%d."
|
||||
"Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog);
|
||||
err = rec.remove(schperc);
|
||||
|
||||
rver.curr().zero();
|
||||
rver.put(VER_CODDITTA, prefix().firm().codice());
|
||||
rver.put(VER_TIPOA, tipopercip);
|
||||
rver.put(VER_CODANAGR, codpercip);
|
||||
rver.put(VER_NPROG, nprog);
|
||||
|
||||
const TRectype rvercmp(rver.curr());
|
||||
bool removed = false;
|
||||
|
||||
for (int errver = rver.read(_isgteq); errver == NOERR && rver.curr() == rvercmp; errver = rver.next())
|
||||
{
|
||||
rver.remove();
|
||||
}
|
||||
if (removed)
|
||||
msg.format("Sono state eliminate le righe di versamento relative alla scheda %c/%ld/%d."
|
||||
"Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog);
|
||||
|
||||
rpag.curr().zero();
|
||||
rver.put(PAG_CODDITTA, prefix().firm().codice());
|
||||
rver.put(PAG_TIPOA, tipopercip);
|
||||
rver.put(PAG_CODANAGR, codpercip);
|
||||
rver.put(PAG_NPROG, nprog);
|
||||
|
||||
const TRectype rpagcmp(rpag.curr());
|
||||
removed = false;
|
||||
|
||||
for (int errpag = rpag.read(_isgteq); errpag == NOERR && rpag.curr() == rpagcmp; errpag = rpag.next())
|
||||
{
|
||||
removed = true;
|
||||
rpag.remove();
|
||||
}
|
||||
|
||||
if (removed)
|
||||
{
|
||||
TString s;
|
||||
|
||||
s.format("Sono state eliminate le righe di pagamento relative alla scheda %c/%ld/%d."
|
||||
"Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog);
|
||||
msg << s;
|
||||
}
|
||||
|
||||
if (_viswin && msg.full())
|
||||
{
|
||||
TString riga;
|
||||
FOR_EACH_TOKEN(msg, line)
|
||||
{
|
||||
if (*line)
|
||||
{
|
||||
riga = riga.empty() ? "*** " : " ";
|
||||
riga << line << '.';
|
||||
_viswin->add_line(riga);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
message_box(msg);
|
||||
}
|
||||
else
|
||||
if (i < orig_numsch)
|
||||
{
|
||||
err = rec.rewrite(schperc);
|
||||
if (err == _iskeynotfound)
|
||||
err = rec.write(schperc);
|
||||
}
|
||||
else
|
||||
{
|
||||
err = rec.write(schperc);
|
||||
while (err == _isreinsert)
|
||||
{
|
||||
int newprog = rec.get_int(SCH_NPROG) + 1;
|
||||
|
||||
rec.put(SCH_NPROG, newprog);
|
||||
err = rec.rewrite(schperc);
|
||||
}
|
||||
}
|
||||
perc.zero();
|
||||
perc.put(PRC_CODDITTA, prefix().firm().codice());
|
||||
perc.put(PRC_TIPOA, tipo);
|
||||
perc.put(PRC_CODANAGR, codanagr);
|
||||
perc.write();
|
||||
}
|
||||
if (err != NOERR)
|
||||
_error = m770_write_error;
|
||||
}
|
||||
return _error;
|
||||
}
|
||||
|
||||
void TContabilizzazione::aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save)
|
||||
{
|
||||
const TRectype& mov = mv.curr();
|
||||
@ -3713,7 +3946,11 @@ void TContabilizzazione::display_error(TDocumento& doc)
|
||||
"E' necessario contabilizzare tutti i documenti in sequenza.",
|
||||
(const char*)numerazione, numero);
|
||||
break;
|
||||
default: // errori generici o non indicati vengono visualizzati nel punto dell'errore
|
||||
case m770_write_error:
|
||||
msg.format("Errore in scrittura della scheda percipiente relativa\nal documento %s/%ld.",
|
||||
(const char*)numerazione, numero);
|
||||
break;
|
||||
default: // errori generici o non indicati vengono visualizzati nel punto dell'errore
|
||||
//msg.format("E' stato rilevato un errore generico contabilizzando il documento %s/%ld.",
|
||||
// (const char*)numerazione,numero);
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user