Generazione fatture + nAC di nolo invece del viceversa
git-svn-id: svn://10.65.10.50/branches/R_10_00@22861 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5a65876e44
commit
cb52f86f76
135
ha/ha0500.cpp
135
ha/ha0500.cpp
@ -491,7 +491,7 @@ bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti
|
|||||||
|
|
||||||
|
|
||||||
bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||||
TAssoc_array& nac_nolo, TLog_report& log)
|
TAssoc_array& fat_nolo, TLog_report& log)
|
||||||
{
|
{
|
||||||
if (contratti_cliente.empty())
|
if (contratti_cliente.empty())
|
||||||
return false;
|
return false;
|
||||||
@ -552,7 +552,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
cod_riga = codspesa;
|
cod_riga = codspesa;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TDate datadoc = mask.get(F_DATAELAB);
|
const TDate datadoc = mask.get(tipo_contratto == 'N' ? F_DATANOLO : F_DATAELAB);
|
||||||
const int anno = datadoc.year();
|
const int anno = datadoc.year();
|
||||||
//solo in caso di elaborazione definitiva si scrivono NAC di tipo D;
|
//solo in caso di elaborazione definitiva si scrivono NAC di tipo D;
|
||||||
//sennò di tipo P, che sono uccidibili all'inizio di ogni nuova elaborazione
|
//sennò di tipo P, che sono uccidibili all'inizio di ogni nuova elaborazione
|
||||||
@ -567,8 +567,25 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
nac.put(DOC_CODAG, codage);
|
nac.put(DOC_CODAG, codage);
|
||||||
nac.put(DOC_CODPAG, contratto.get(DOC_CODPAG));
|
nac.put(DOC_CODPAG, contratto.get(DOC_CODPAG));
|
||||||
nac.put(DOC_DOC1, contratto.get(DOC_DOC1));
|
nac.put(DOC_DOC1, contratto.get(DOC_DOC1));
|
||||||
|
|
||||||
|
TToken_string cnkey; // Chiave contratto
|
||||||
|
cnkey.add(contratto.get(DOC_PROVV));
|
||||||
|
cnkey.add(contratto.get(DOC_ANNO));
|
||||||
|
cnkey.add(contratto.get(DOC_CODNUM));
|
||||||
|
cnkey.add(contratto.get(DOC_NDOC));
|
||||||
|
TToken_string* fatkey = (TToken_string*)fat_nolo.objptr(cnkey);
|
||||||
|
if (fatkey != NULL)
|
||||||
|
{
|
||||||
|
// Skip fatkey->get(0) = PROVV
|
||||||
|
nac.put(DOC_ANNORIF, fatkey->get(1));
|
||||||
|
nac.put(DOC_CODNUMRIF, fatkey->get());
|
||||||
|
nac.put(DOC_NUMDOCRIF, fatkey->get());
|
||||||
|
nac.put(DOC_DATADOCRIF, fatkey->get());
|
||||||
|
}
|
||||||
|
else
|
||||||
nac.put(DOC_DATADOCRIF, contratto.get(DOC_DATADOCRIF));
|
nac.put(DOC_DATADOCRIF, contratto.get(DOC_DATADOCRIF));
|
||||||
|
|
||||||
|
|
||||||
// RIGHE
|
// RIGHE
|
||||||
|
|
||||||
//ogni riga di tipo merce (verigh01) del contratto origina una riga della NAC
|
//ogni riga di tipo merce (verigh01) del contratto origina una riga della NAC
|
||||||
@ -677,7 +694,6 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// salvataggi vari
|
// salvataggi vari
|
||||||
// ---------------
|
// ---------------
|
||||||
// NAC
|
// NAC
|
||||||
@ -718,20 +734,14 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'N':
|
case 'N':
|
||||||
|
if (fatkey != NULL)
|
||||||
{
|
{
|
||||||
TToken_string nakey; // Chiave NAC
|
const char provv = fatkey->get_char(0);
|
||||||
nakey.add(provv);
|
const int anno = fatkey->get_int();
|
||||||
nakey.add(anno);
|
const char* codnum = fatkey->get();
|
||||||
nakey.add(nac_codnum);
|
const long ndoc = fatkey->get_long();
|
||||||
nakey.add(nac.get(DOC_NDOC));
|
const TDocumento fat(provv, anno, codnum, ndoc);
|
||||||
|
genera_eff(fat, nac.totale_doc(), log);
|
||||||
TToken_string cnkey; // Chiave contratto
|
|
||||||
cnkey.add(contratto.get(DOC_PROVV));
|
|
||||||
cnkey.add(contratto.get(DOC_ANNO));
|
|
||||||
cnkey.add(contratto.get(DOC_CODNUM));
|
|
||||||
cnkey.add(contratto.get(DOC_NDOC));
|
|
||||||
|
|
||||||
nac_nolo.add(cnkey, nakey); // memorizza la coppia contratto/nac di nolo
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -761,7 +771,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& nac_nolo, TLog_report& log)
|
bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& fat_nolo, TLog_report& log)
|
||||||
{
|
{
|
||||||
//si informa se l'elaborazione è definitiva o meno
|
//si informa se l'elaborazione è definitiva o meno
|
||||||
const char provv = mask.get_bool(F_DEFINITIVO) ? 'D' : 'P';
|
const char provv = mask.get_bool(F_DEFINITIVO) ? 'D' : 'P';
|
||||||
@ -835,23 +845,11 @@ bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto
|
|||||||
(const char*)fat_codnum, (const char*)fat_tipodoc, fat.get_char(DOC_PROVV), fat.get_long(DOC_NDOC));
|
(const char*)fat_codnum, (const char*)fat_tipodoc, fat.get_char(DOC_PROVV), fat.get_long(DOC_NDOC));
|
||||||
log.log(0, log_msg);
|
log.log(0, log_msg);
|
||||||
|
|
||||||
real tot_nac;
|
fat_nolo = fat.get(DOC_PROVV);
|
||||||
if (!nac_nolo.empty_items())
|
fat_nolo.add(fat.get(DOC_ANNO));
|
||||||
{
|
fat_nolo.add(fat.get(DOC_CODNUM));
|
||||||
const char provv = nac_nolo.get(0)[0];
|
fat_nolo.add(fat.get(DOC_NDOC));
|
||||||
const int anno = nac_nolo.get_int();
|
fat_nolo.add(fat.get(DOC_DATADOC));
|
||||||
const TString4 codnum = nac_nolo.get();
|
|
||||||
const long ndoc = nac_nolo.get_long();
|
|
||||||
TDocumento nac(provv, anno, codnum, ndoc);
|
|
||||||
nac.put(DOC_DATADOCRIF, fat.get(DOC_DATADOC));
|
|
||||||
nac.put(DOC_CODNUMRIF, fat.get(DOC_CODNUM));
|
|
||||||
nac.put(DOC_ANNORIF, fat.get(DOC_ANNO));
|
|
||||||
nac.put(DOC_NUMDOCRIF, fat.get(DOC_NDOC));
|
|
||||||
nac.rewrite();
|
|
||||||
|
|
||||||
tot_nac = nac.totale_doc();
|
|
||||||
}
|
|
||||||
genera_eff(fat, tot_nac, log);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -921,10 +919,31 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
long old_codcf = 0L;
|
long old_codcf = 0L;
|
||||||
//array con l'insieme dei contratti e dei documenti elaborati per un singolo cliente!
|
//array con l'insieme dei contratti e dei documenti elaborati per un singolo cliente!
|
||||||
TArray contratti_cliente, documenti_cliente;
|
TArray contratti_cliente, documenti_cliente;
|
||||||
TAssoc_array nac_nolo;
|
TAssoc_array fat_nolo;
|
||||||
|
|
||||||
const int tc = mask.get_int(F_TIPOCONTR); // 0x7 (tutti tranne nolo) o 0x8 (solo nolo)
|
const int tc = mask.get_int(F_TIPOCONTR); // 0x7 (tutti tranne nolo) o 0x8 (solo nolo)
|
||||||
|
|
||||||
|
if (tc & 0x8) // Elaborazione nolo?
|
||||||
|
{
|
||||||
|
// Elabora tutti i contratti di nolo per generare fatture ed effetti
|
||||||
|
const int cn = find_contratti_cliente(mask.get_long(F_CODCF), mask, 0x8, contratti_cliente);
|
||||||
|
FOR_EACH_ARRAY_ROW(contratti_cliente, n_nolo, r_nolo)
|
||||||
|
{
|
||||||
|
TContratto_premi& contratto = *(TContratto_premi*)r_nolo;
|
||||||
|
|
||||||
|
TToken_string fatkey;
|
||||||
|
if (genera_fat(mask, contratto, fatkey, log))
|
||||||
|
{
|
||||||
|
TToken_string cnkey; // Chiave contratto
|
||||||
|
cnkey.add(contratto.get(DOC_PROVV));
|
||||||
|
cnkey.add(contratto.get(DOC_ANNO));
|
||||||
|
cnkey.add(contratto.get(DOC_CODNUM));
|
||||||
|
cnkey.add(contratto.get(DOC_NDOC));
|
||||||
|
fat_nolo.add(cnkey, fatkey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//giro sulle fatture (è il giro di più alto livello che viene esteso all'interno delle elabora_contratti)
|
//giro sulle fatture (è il giro di più alto livello che viene esteso all'interno delle elabora_contratti)
|
||||||
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
|
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
|
||||||
{
|
{
|
||||||
@ -937,23 +956,34 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
{
|
{
|
||||||
//generazione NAC del cliente precedente (una per contratto cliente)
|
//generazione NAC del cliente precedente (una per contratto cliente)
|
||||||
if (old_codcf > 0 && !documenti_cliente.empty())
|
if (old_codcf > 0 && !documenti_cliente.empty())
|
||||||
genera_nac(mask, contratti_cliente, nac_nolo, log);
|
genera_nac(mask, contratti_cliente, fat_nolo, log);
|
||||||
|
|
||||||
//aggiorna old_codcf in modo da poter controllare i contratti solo al cambio codcf
|
//aggiorna old_codcf in modo da poter controllare i contratti solo al cambio codcf
|
||||||
old_codcf = codcf;
|
old_codcf = codcf;
|
||||||
|
|
||||||
|
const int n_contratti = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
|
||||||
|
|
||||||
TString8 key; key.format("C|%ld", codcf);
|
TString8 key; key.format("C|%ld", codcf);
|
||||||
TString msg; msg << TR("Cliente") << ' ' << codcf << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
|
TString msg; msg << TR("Cliente") << ' ' << codcf << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
|
||||||
log.log(0, msg);
|
|
||||||
|
|
||||||
const int n_contratti = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
|
if (n_contratti > 0)
|
||||||
if (n_contratti == 0)
|
|
||||||
{
|
{
|
||||||
TString msg;
|
log.log(0, msg);
|
||||||
msg << TR("Il cliente non ha un contratto valido nel periodo selezionato pur avendo fatture.");
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tc & 0x8) // Elaborazione nolo?
|
||||||
|
{
|
||||||
|
// Nulla di grave se non esistono contratti di nolo
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log.log(0, msg);
|
||||||
|
msg = TR("Non ha un contratto valido nel periodo selezionato pur avendo fatture.");
|
||||||
log.log(1, msg);
|
log.log(1, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (contratti_cliente.items() > 0)
|
if (contratti_cliente.items() > 0)
|
||||||
{
|
{
|
||||||
@ -971,7 +1001,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
|
|
||||||
//generazione NAC dell'ultimo cliente (una per contratto cliente)
|
//generazione NAC dell'ultimo cliente (una per contratto cliente)
|
||||||
if (!contratti_cliente.empty())
|
if (!contratti_cliente.empty())
|
||||||
genera_nac(mask, contratti_cliente, nac_nolo, log);
|
genera_nac(mask, contratti_cliente, fat_nolo, log);
|
||||||
|
|
||||||
//se elaborazione definitiva -> cambia lo stato ai documenti di vendita elaborati, mettendolo uguale..
|
//se elaborazione definitiva -> cambia lo stato ai documenti di vendita elaborati, mettendolo uguale..
|
||||||
//..a quello deciso in configurazione
|
//..a quello deciso in configurazione
|
||||||
@ -986,26 +1016,6 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
fattura.rewrite();
|
fattura.rewrite();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tc & 0x8) // Elaborazino nolo?
|
|
||||||
{
|
|
||||||
// Elabora tutti i contratti di nolo per generare fatture ed effetti
|
|
||||||
const int cn = find_contratti_cliente(mask.get_long(F_CODCF), mask, 0x8, contratti_cliente);
|
|
||||||
FOR_EACH_ARRAY_ROW(contratti_cliente, n_nolo, r_nolo)
|
|
||||||
{
|
|
||||||
TContratto_premi& contratto = *(TContratto_premi*)r_nolo;
|
|
||||||
|
|
||||||
TToken_string cnkey; // Chiave contratto
|
|
||||||
cnkey.add(contratto.get(DOC_PROVV));
|
|
||||||
cnkey.add(contratto.get(DOC_ANNO));
|
|
||||||
cnkey.add(contratto.get(DOC_CODNUM));
|
|
||||||
cnkey.add(contratto.get(DOC_NDOC));
|
|
||||||
|
|
||||||
const TToken_string* nk = (const TToken_string*)nac_nolo.objptr(cnkey);
|
|
||||||
TToken_string nakey = nk ? *nk : EMPTY_STRING;
|
|
||||||
genera_fat(mask, contratto, nakey, log);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//metodo di alto livello con i punti principali del programma (come da analisi...)
|
//metodo di alto livello con i punti principali del programma (come da analisi...)
|
||||||
@ -1055,3 +1065,4 @@ int ha0500 (int argc, char* argv[])
|
|||||||
elabapp.run(argc, argv, TR("Generazione NAC"));
|
elabapp.run(argc, argv, TR("Generazione NAC"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,3 +13,4 @@
|
|||||||
#define F_DATAELAB 214
|
#define F_DATAELAB 214
|
||||||
#define F_DEFINITIVO 215
|
#define F_DEFINITIVO 215
|
||||||
#define F_KILLPROVV 216
|
#define F_KILLPROVV 216
|
||||||
|
#define F_DATANOLO 217
|
@ -81,16 +81,22 @@ END
|
|||||||
|
|
||||||
BOOLEAN F_KILLPROVV
|
BOOLEAN F_KILLPROVV
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Eliminare tutte le note di accredito provvisorie"
|
PROMPT 2 8 "Elimina note di accredito provvisorie"
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE F_DATAELAB
|
DATE F_DATAELAB
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 43 7 "Data elaborazione "
|
PROMPT 45 7 "Data elaborazione "
|
||||||
FLAGS "A"
|
FLAGS "A"
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
|
DATE F_DATANOLO
|
||||||
|
BEGIN
|
||||||
|
PROMPT 45 8 "Data NAC nolo "
|
||||||
|
FLAGS "A"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
RADIOBUTTON F_TIPOCONTR 1 76
|
RADIOBUTTON F_TIPOCONTR 1 76
|
||||||
BEGIN
|
BEGIN
|
||||||
|
Loading…
x
Reference in New Issue
Block a user