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
141
ha/ha0500.cpp
141
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,
|
||||
TAssoc_array& nac_nolo, TLog_report& log)
|
||||
TAssoc_array& fat_nolo, TLog_report& log)
|
||||
{
|
||||
if (contratti_cliente.empty())
|
||||
return false;
|
||||
@ -552,7 +552,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
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();
|
||||
//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
|
||||
@ -567,7 +567,24 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
nac.put(DOC_CODAG, codage);
|
||||
nac.put(DOC_CODPAG, contratto.get(DOC_CODPAG));
|
||||
nac.put(DOC_DOC1, contratto.get(DOC_DOC1));
|
||||
nac.put(DOC_DATADOCRIF, contratto.get(DOC_DATADOCRIF));
|
||||
|
||||
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));
|
||||
|
||||
|
||||
// RIGHE
|
||||
|
||||
@ -677,7 +694,6 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// salvataggi vari
|
||||
// ---------------
|
||||
// NAC
|
||||
@ -718,20 +734,14 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
{
|
||||
TToken_string nakey; // Chiave NAC
|
||||
nakey.add(provv);
|
||||
nakey.add(anno);
|
||||
nakey.add(nac_codnum);
|
||||
nakey.add(nac.get(DOC_NDOC));
|
||||
|
||||
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
|
||||
if (fatkey != NULL)
|
||||
{
|
||||
const char provv = fatkey->get_char(0);
|
||||
const int anno = fatkey->get_int();
|
||||
const char* codnum = fatkey->get();
|
||||
const long ndoc = fatkey->get_long();
|
||||
const TDocumento fat(provv, anno, codnum, ndoc);
|
||||
genera_eff(fat, nac.totale_doc(), log);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -761,7 +771,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
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
|
||||
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));
|
||||
log.log(0, log_msg);
|
||||
|
||||
real tot_nac;
|
||||
if (!nac_nolo.empty_items())
|
||||
{
|
||||
const char provv = nac_nolo.get(0)[0];
|
||||
const int anno = nac_nolo.get_int();
|
||||
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);
|
||||
fat_nolo = fat.get(DOC_PROVV);
|
||||
fat_nolo.add(fat.get(DOC_ANNO));
|
||||
fat_nolo.add(fat.get(DOC_CODNUM));
|
||||
fat_nolo.add(fat.get(DOC_NDOC));
|
||||
fat_nolo.add(fat.get(DOC_DATADOC));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -921,10 +919,31 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
||||
long old_codcf = 0L;
|
||||
//array con l'insieme dei contratti e dei documenti elaborati per un singolo 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)
|
||||
|
||||
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)
|
||||
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
|
||||
{
|
||||
@ -937,21 +956,32 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
||||
{
|
||||
//generazione NAC del cliente precedente (una per contratto cliente)
|
||||
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
|
||||
old_codcf = codcf;
|
||||
|
||||
const int n_contratti = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
|
||||
|
||||
TString8 key; key.format("C|%ld", codcf);
|
||||
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;
|
||||
msg << TR("Il cliente non ha un contratto valido nel periodo selezionato pur avendo fatture.");
|
||||
log.log(1, msg);
|
||||
log.log(0, msg);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
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..
|
||||
//..a quello deciso in configurazione
|
||||
@ -986,26 +1016,6 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
||||
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...)
|
||||
@ -1055,3 +1065,4 @@ int ha0500 (int argc, char* argv[])
|
||||
elabapp.run(argc, argv, TR("Generazione NAC"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -13,3 +13,4 @@
|
||||
#define F_DATAELAB 214
|
||||
#define F_DEFINITIVO 215
|
||||
#define F_KILLPROVV 216
|
||||
#define F_DATANOLO 217
|
@ -81,16 +81,22 @@ END
|
||||
|
||||
BOOLEAN F_KILLPROVV
|
||||
BEGIN
|
||||
PROMPT 2 8 "Eliminare tutte le note di accredito provvisorie"
|
||||
PROMPT 2 8 "Elimina note di accredito provvisorie"
|
||||
END
|
||||
|
||||
DATE F_DATAELAB
|
||||
BEGIN
|
||||
PROMPT 43 7 "Data elaborazione "
|
||||
PROMPT 45 7 "Data elaborazione "
|
||||
FLAGS "A"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE F_DATANOLO
|
||||
BEGIN
|
||||
PROMPT 45 8 "Data NAC nolo "
|
||||
FLAGS "A"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
RADIOBUTTON F_TIPOCONTR 1 76
|
||||
BEGIN
|
||||
|
Loading…
x
Reference in New Issue
Block a user