Patch level : 12.0 784

Files correlati     : ve0.exe ve1.exe ve5.exe ve6.exe
Commento            :

Rifatto il metodo per determinare il numero di partita nella contabilizzazione fatture e nella generazione effetti, ora dovrebbero essere omogenei cioè :

Nel casosia una fattura di acquisto o una nota di credito viene considerato prima il documento di riferimento, se compilato.

Poi vengono utilizzati il numero di documento, il protocollo IVA o il mese a seconda dei flag sul saldaconto.
This commit is contained in:
AlexBonazzi 2019-05-08 21:49:58 +02:00
parent a2e56d2fae
commit 1d44f525ff
2 changed files with 239 additions and 89 deletions

View File

@ -534,7 +534,9 @@ static TBill _spin_billa, _spin_billv,
static TBill _co_cliente, // conto clifo per movimento d'anticipo
_co_controp; // conto di contropartita per il movimetno d'anticipo
static bool _nump_cfg; // se true prende il numero rif. partita dal numero protocollo
static bool _numpart_pro; // se true prende il numero rif. partita dal numero protocollo
static bool _numpart_mon; // se true prende il numero rif. partita dal mese
static char _part_type; // tipi di numero partita "D" codcumento, "P" protocollo IVA, "M" Mese
static bool _sc_enabled; // se true il saldaconto di ditta è abilitato
static bool _in_enabled; // se true l'intra è abilitato
static TToken_string* _search_seq = NULL;
@ -855,7 +857,12 @@ bool TContabilizzazione::load_parameters()
_sc_enabled = conf.get_bool("GesSal","cg");
_in_enabled = dongle().active(INAUT);
_nump_cfg = conf.get_bool("RifPro","cg");
_numpart_pro = conf.get_bool("RifPro", "cg");
_numpart_mon = conf.get_bool("RifMonth", "cg");
_part_type = 'D';
if (_numpart_pro) _part_type = 'P';
else
if (_numpart_mon) _part_type = 'M';
int gr,co;
long so;
@ -2691,64 +2698,68 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc, bool recontabiliz
pa.rewrite();
}
int anno = head.get_int(MOV_ANNOIVA);
TString8 numpart; // Max. 7 chars
if (_nump_cfg)
// int anno = head.get_int(MOV_ANNOIVA);
int anno = 0;
TString8 numpart; // Max. 7 chars
if (doc.get(DOC_TIPOCF) == "F" || is_nc)
{
numpart = head.get(MOV_PROTIVA);
if (is_nc)
{
int annorif = doc.get_int("ANNORIF");
if (annorif <= 0)
{
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
annorif = ddr.year();
if (annorif <= 0)
annorif = anno;
}
TString4 codnumrif = doc.get("CODNUMRIF");
if (codnumrif.blank())
codnumrif = doc.get(DOC_CODNUM);
anno = doc.get_int(DOC_ANNORIF);
numpart = doc.get(DOC_NUMDOCRIF);
const TString8 numdocrif = doc.get(DOC_NUMDOCRIF);
if (numdocrif.full())
{
TToken_string keydoc;
keydoc.add(doc.get(DOC_PROVV));
keydoc.add(annorif);
keydoc.add(codnumrif);
keydoc.add(numdocrif);
const long numreg = atol(cache().get(LF_DOC, keydoc, DOC_NUMREG));
if (numreg > 0)
{
TPartite_array pa; pa.add_numreg(numreg);
const TPartita* game = pa.first();
if (game != NULL)
{
anno = game->anno();
numpart = game->numero();
}
}
}
}
}
else
if (numpart.full())
{
numpart = doc.get(DOC_NUMDOCRIF);
if (_caus->iva() == iva_vendite && !is_nc)
numpart.cut(0);
TString4 codnum = doc.get(DOC_CODNUMRIF);
TToken_string keydoc;
if (numpart.blank())
numpart = head.get(MOV_NUMDOC);
else
if (codnum.blank())
codnum = doc.get(DOC_CODNUM);
if (anno <= 0)
{
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
anno = ddr.year();
}
keydoc.add(doc.get(DOC_PROVV));
keydoc.add(anno);
keydoc.add(codnum);
keydoc.add(numpart);
const long numreg = atol(cache().get(LF_DOC, keydoc, DOC_NUMREG));
if (numreg > 0)
{
TPartite_array pa; pa.add_numreg(numreg);
const TPartita* game = pa.first();
if (game != NULL)
{
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
if (ddr.ok())
anno = ddr.year();
anno = game->anno();
numpart = game->numero();
}
}
}
}
if (anno <= 0 || numpart.blank())
{
switch (_part_type)
{
case 'P':
anno = head.get_int(MOV_ANNOES);
numpart = head.get(MOV_PROTIVA);
break;
case 'M':
anno = doc.get_int(DOC_ANNO);
numpart = format("%02d", doc.get_date(DOC_DATADOC).month());
break;
case 'D':
default:
anno = doc.get_int(DOC_ANNO);
numpart = doc.get(DOC_NDOC);
break;
}
}
TPartita* newgame = NULL;
if (anno > 0 && numpart.full())
{

View File

@ -359,13 +359,15 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
const real change = doc.cambio();
const TDate datafatt = doc.get_date(DOC_DATADOC);
const bool is_nota_credito = doc.is_nota_credito();
long numdocrif = doc.get_long(DOC_NUMDOCRIF);
int annodocrif = doc.get_date(DOC_DATADOCRIF).year();
if (numdocrif > 0L && doc.get_char(DOC_TIPOCF) == 'C' && !doc.tipo().nota_credito())
{
annodocrif = 0;
numdocrif = 0L;
}
TString8 numdocrif = doc.get(DOC_NUMDOCRIF);
long lnumdocrif = doc.get_long(DOC_NUMDOCRIF);
int annodocrif = doc.get_date(DOC_DATADOCRIF).year();
if (numdocrif.full() && doc.get_char(DOC_TIPOCF) == 'C' && !doc.tipo().nota_credito())
{
annodocrif = 0;
numdocrif = 0L;
}
// Qui il controllo sul residuo da pagare per il documento corrente non va effettuato,
// proprio perchè si sta effettuando un raggruppamento di effetti; eventuali documenti
@ -442,7 +444,7 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
{
const int annoeff = effetto.row_r(r).get_int(REFF_ANNODOC);
const long codeff = effetto.row_r(r).get_long(REFF_NFATT);
if (annoeff == annodocrif && codeff == numdocrif)
if (annoeff == annodocrif && codeff == lnumdocrif)
break;
}
if (r <= rows) // Se l'ha trovata ...
@ -502,14 +504,88 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array, bool interatti
riga.put(REFF_NFATT,numdoc);
riga.put(REFF_IMPFATT,totale_fatt.get_num());
riga.put(REFF_IMPORTO,imprata);
riga.put(REFF_ANNO, annodocrif);
TString8 numpart; // Max. 7 chars
int anno = 0;
const bool is_nota_credito = doc.tipo().nota_credito();
const bool numpart_pro = ini_get_bool(CONFIG_DITTA, "cg", "RifPro");
const bool numpart_mon = ini_get_bool(CONFIG_DITTA, "cg", "RifMonth");
char part_type = 'D';
const TString4 npart_type = ini_get_string(CONFIG_DITTA, "cg", "RifPro");
if (numpart_pro)
part_type = 'P';
else
if (numpart_mon)
part_type = 'M';
if (npart_type == "M" && effetto.get(EFF_TIPOCF) == "C")
riga.put(REFF_NUMPART, format("%02d", datafatt.month()));
else
riga.put(REFF_NUMPART, numdocrif);
if (doc.get(DOC_TIPOCF) == "F" || is_nota_credito)
{
anno = doc.get_int(DOC_ANNORIF);
numpart = doc.get(DOC_NUMDOCRIF); // Max. 7 chars
if (numpart.full())
{
TString4 codnum = doc.get(DOC_CODNUMRIF);
TToken_string keydoc;
if (codnum.blank())
codnum = doc.get(DOC_CODNUM);
if (anno <= 0)
{
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
anno = ddr.year();
}
keydoc.add(doc.get(DOC_PROVV));
keydoc.add(anno);
keydoc.add(codnum);
keydoc.add(numpart);
const long numreg = atol(cache().get(LF_DOC, keydoc, DOC_NUMREG));
if (numreg > 0)
{
TPartite_array pa; pa.add_numreg(numreg);
const TPartita* game = pa.first();
if (game != NULL)
{
anno = game->anno();
numpart = game->numero();
}
}
}
}
if (anno <= 0 || numpart.blank())
{
switch (part_type)
{
case 'P':
{
const TRectype & mov = cache().get(LF_MOV, doc.get_long(DOC_NUMREG));
anno = mov.get_int(MOV_ANNOES);
numpart = mov.get(MOV_PROTIVA);
if (numpart.blank())
{
anno = doc.get_int(DOC_ANNO);
numpart = doc.get(DOC_NDOC);
}
}
break;
case 'M':
anno = doc.get_int(DOC_ANNO);
numpart = format("%02d", doc.get_date(DOC_DATADOC).month());
break;
case 'D':
default:
anno = doc.get_int(DOC_ANNO);
numpart = doc.get(DOC_NDOC);
break;
}
}
riga.put(REFF_ANNO, anno);
riga.put(REFF_NUMPART, numpart);
if (valuta)
{
riga.put(REFF_IMPFATTVAL,totale_fatt.get_num());
@ -696,11 +772,12 @@ void TGenerazione_effetti::generate_bill(TDocumento& doc, bool interattivo) // b
effetto.put(EFF_CODABI,codabi);
effetto.put(EFF_CODCAB,codcab);
effetto.put(EFF_IBAN,iban);
effetto.put(EFF_CUP,doc.get(DOC_CUP));
effetto.put(EFF_CIG,doc.get(DOC_CIG));
effetto.put(EFF_CONTSEP,doc.get(DOC_CONTSEP));
effetto.put(EFF_CUP,doc.get(DOC_CUP));
effetto.put(EFF_CIG,doc.get(DOC_CIG));
effetto.put(EFF_CONTSEP,doc.get(DOC_CONTSEP));
effetto.put(EFF_EFFCOMP,TRUE);
if (i == numrate - 1) effetto.put(EFF_ULTRATA,TRUE);
if (i == numrate - 1)
effetto.put(EFF_ULTRATA,true);
// Put sulla riga dell'effetto
reffetto.put(REFF_NPROGTR,nprog);
reffetto.put(REFF_NRIGATR,1);
@ -710,26 +787,88 @@ void TGenerazione_effetti::generate_bill(TDocumento& doc, bool interattivo) // b
reffetto.put(REFF_ANNODOC,anno);
reffetto.put(REFF_CODNUM,codnum);
reffetto.put(REFF_NFATT,nfatt);
if (doc.get_char(DOC_TIPOCF) == 'F' || doc.tipo().nota_credito())
TString8 numpart; // Max. 7 chars
int anno = 0;
const bool is_nota_credito = doc.tipo().nota_credito();
const bool numpart_pro = ini_get_bool(CONFIG_DITTA, "cg", "RifPro");
const bool numpart_mon = ini_get_bool(CONFIG_DITTA, "cg", "RifMonth");
char part_type = 'D';
if (numpart_pro)
part_type = 'P';
else
if (numpart_mon)
part_type = 'M';
if (doc.get(DOC_TIPOCF) == "F" || is_nota_credito)
{
reffetto.put(REFF_ANNO, doc.get_date(DOC_DATADOCRIF).year());
reffetto.put(REFF_NUMPART, doc.get(DOC_NUMDOCRIF));
anno = doc.get_int(DOC_ANNORIF);
numpart = doc.get(DOC_NUMDOCRIF); // Max. 7 chars
if (numpart.full())
{
TString4 codnum = doc.get(DOC_CODNUMRIF);
TToken_string keydoc;
if (codnum.blank())
codnum = doc.get(DOC_CODNUM);
if (anno <= 0)
{
const TDate ddr = doc.get_date(DOC_DATADOCRIF);
anno = ddr.year();
}
keydoc.add(doc.get(DOC_PROVV));
keydoc.add(anno);
keydoc.add(codnum);
keydoc.add(numpart);
const long numreg = atol(cache().get(LF_DOC, keydoc, DOC_NUMREG));
if (numreg > 0)
{
TPartite_array pa; pa.add_numreg(numreg);
const TPartita* game = pa.first();
if (game != NULL)
{
anno = game->anno();
numpart = game->numero();
}
}
}
}
else
{
const TString4 npart_type = ini_get_string(CONFIG_DITTA, "cg", "RifPro");
if (npart_type == "M" && effetto.get(EFF_TIPOCF) == "C")
{
reffetto.put(REFF_ANNO, datafatt.year());
reffetto.put(REFF_NUMPART, format("%02d", datafatt.month()));
}
else
{
reffetto.put(REFF_ANNO, doc.get_date(DOC_DATADOCRIF).year());
reffetto.put(REFF_NUMPART, doc.get(DOC_NUMDOCRIF));
}
}
if (anno <= 0 || numpart.blank())
{
switch (part_type)
{
case 'P':
{
const TRectype & mov = cache().get(LF_MOV, doc.get_long(DOC_NUMREG));
anno = mov.get_int(MOV_ANNOES);
numpart = mov.get(MOV_PROTIVA);
if (numpart.blank())
{
anno = doc.get_int(DOC_ANNO);
numpart = doc.get(DOC_NDOC);
}
}
break;
case 'M':
anno = doc.get_int(DOC_ANNO);
numpart = format("%02d", doc.get_date(DOC_DATADOC).month());
break;
case 'D':
default:
anno = doc.get_int(DOC_ANNO);
numpart = doc.get(DOC_NDOC);
break;
}
}
reffetto.put(REFF_ANNO, anno);
reffetto.put(REFF_NUMPART, numpart);
importo = pag.importo_rata(i,FALSE);
effetto.put(EFF_IMPORTO,importo);
reffetto.put(REFF_IMPFATT,totale_fatt.get_num());