Corretta generazione NAC
git-svn-id: svn://10.65.10.50/branches/R_10_00@22893 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b085f4b290
commit
7e2e92a480
170
ha/ha0500.cpp
170
ha/ha0500.cpp
@ -145,13 +145,13 @@ protected:
|
|||||||
//metodi medio livello
|
//metodi medio livello
|
||||||
bool aggiorna_contratto(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log);
|
bool aggiorna_contratto(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log);
|
||||||
bool deve_generare_nac(const TContratto_premi& contratto, const TDate& data) const;
|
bool deve_generare_nac(const TContratto_premi& contratto, const TDate& data) const;
|
||||||
bool elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log);
|
word elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log);
|
||||||
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TAssoc_array& nac_nolo, TLog_report& log);
|
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TAssoc_array& nac_nolo, TArray& documenti_cliente, TLog_report& log);
|
||||||
bool genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& nakey, TLog_report& log);
|
bool genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& nakey, TLog_report& log);
|
||||||
bool genera_eff(const TDocumento& fat, const real& tot_nac, TLog_report& log);
|
bool genera_eff(const TDocumento& fat, const real& tot_nac, TLog_report& log);
|
||||||
|
|
||||||
//metodi basso livello
|
//metodi basso livello
|
||||||
int find_contratti_cliente(const long codcfatt, const TMask& mask, int flags, TArray& contratti_cliente);
|
word find_contratti_cliente(const long codcfatt, const TMask& mask, int flags, TArray& contratti_cliente);
|
||||||
void check_date(const TDate& datafine, TDate& dataini);
|
void check_date(const TDate& datafine, TDate& dataini);
|
||||||
int find_numerazioni(const TString& tipo_to_elab, TString_array& num_doc);
|
int find_numerazioni(const TString& tipo_to_elab, TString_array& num_doc);
|
||||||
int month_diff(const TDate& inizio, const TDate& fine) const;
|
int month_diff(const TDate& inizio, const TDate& fine) const;
|
||||||
@ -255,8 +255,8 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
|||||||
//lo stato dipende da quanto sta scritto sulla elaborazione differita (stato iniziale dei docs da considerare)
|
//lo stato dipende da quanto sta scritto sulla elaborazione differita (stato iniziale dei docs da considerare)
|
||||||
//viene messo CODNUM nella SELECT perchè, essendoci un range di date nelle chiavi, la numerazione verrebbe ignorata! (provato!)
|
//viene messo CODNUM nella SELECT perchè, essendoci un range di date nelle chiavi, la numerazione verrebbe ignorata! (provato!)
|
||||||
query << "\nSELECT (STATO>=#STATOINI)";
|
query << "\nSELECT (STATO>=#STATOINI)";
|
||||||
if (tc != 8) // Per i contratti NON di nolo ...
|
if (tc != 8) // Per i contratti NON di nolo ...
|
||||||
query << "&&(STATO<'9')"; // ... scarta i documenti definitivi
|
query << "&&(STATO<#STATOFIN)"; // ... scarta i documenti definitivi
|
||||||
|
|
||||||
//in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare!
|
//in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare!
|
||||||
TConfig config(CONFIG_DITTA, "ha");
|
TConfig config(CONFIG_DITTA, "ha");
|
||||||
@ -297,7 +297,10 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
|||||||
|
|
||||||
//lo stato dei documenti da considerare va a raccatarlo nel config
|
//lo stato dei documenti da considerare va a raccatarlo nel config
|
||||||
const TString& stato_ini = config.get("StatoIniFatt");
|
const TString& stato_ini = config.get("StatoIniFatt");
|
||||||
|
const TString& stato_fin = config.get("StatoFinFatt");
|
||||||
|
|
||||||
recset.set_var("#STATOINI", stato_ini);
|
recset.set_var("#STATOINI", stato_ini);
|
||||||
|
recset.set_var("#STATOFIN", stato_fin);
|
||||||
|
|
||||||
//se c'è l'agente specificato...
|
//se c'è l'agente specificato...
|
||||||
const TString& agente = mask.get(F_CODAGE);
|
const TString& agente = mask.get(F_CODAGE);
|
||||||
@ -314,8 +317,9 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
|||||||
|
|
||||||
//metodo che riempie un array con tutti i contratti del cliente passatogli (in base alla tipologia di contratti da elaborare)
|
//metodo che riempie un array con tutti i contratti del cliente passatogli (in base alla tipologia di contratti da elaborare)
|
||||||
// flags: 0x7 = tutti tranne nolo; 0x8 = nolo
|
// flags: 0x7 = tutti tranne nolo; 0x8 = nolo
|
||||||
int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& mask, int flags, TArray& contratti_cliente)
|
word THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& mask, int flags, TArray& contratti_cliente)
|
||||||
{
|
{
|
||||||
|
word freq = 0;
|
||||||
contratti_cliente.destroy();
|
contratti_cliente.destroy();
|
||||||
|
|
||||||
const TDate data_fine_elab = mask.get_date(F_ADATA);
|
const TDate data_fine_elab = mask.get_date(F_ADATA);
|
||||||
@ -434,10 +438,19 @@ int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& m
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (curr_contratto != NULL) // Ignora contratti chiusi
|
if (curr_contratto != NULL) // Ignora contratti chiusi
|
||||||
|
{
|
||||||
contratti_cliente.add(curr_contratto);
|
contratti_cliente.add(curr_contratto);
|
||||||
|
switch (curr_contratto->frequenza())
|
||||||
|
{
|
||||||
|
case 'A': freq |= 0x8; break;
|
||||||
|
case 'S': freq |= 0x4; break;
|
||||||
|
case 'T': freq |= 0x2; break;
|
||||||
|
default : freq |= 0x1; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return contratti_cliente.items();
|
return freq;
|
||||||
}
|
}
|
||||||
|
|
||||||
int THardy_elab_docs::month_diff(const TDate& inizio, const TDate& fine) const
|
int THardy_elab_docs::month_diff(const TDate& inizio, const TDate& fine) const
|
||||||
@ -530,10 +543,13 @@ bool THardy_elab_docs::deve_generare_nac(const TContratto_premi& contratto, cons
|
|||||||
|
|
||||||
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi..
|
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi..
|
||||||
//..del cliente
|
//..del cliente
|
||||||
bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log)
|
word THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log)
|
||||||
{
|
{
|
||||||
const TDate datadoc = curr_doc.get(DOC_DATADOC);
|
const TDate datadoc = curr_doc.get(DOC_DATADOC);
|
||||||
bool elaborato = false;
|
word elaborato = 0;
|
||||||
|
|
||||||
|
TString4 olddoc2 = curr_doc.get(DOC_DOC2); olddoc2.rpad(4); // Quattro spazi o X in corrispondenza dell'elaborazione
|
||||||
|
TString4 newdoc2 = olddoc2;
|
||||||
|
|
||||||
FOR_EACH_PHYSICAL_RDOC(curr_doc, r, rdoc) if (rdoc->is_merce()) //giro su tutte le righe merce delle fatture
|
FOR_EACH_PHYSICAL_RDOC(curr_doc, r, rdoc) if (rdoc->is_merce()) //giro su tutte le righe merce delle fatture
|
||||||
{
|
{
|
||||||
@ -547,29 +563,48 @@ bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti
|
|||||||
// Calcola l'inizio di validità dei documenti in base alla frequenza (14-01-2013)
|
// Calcola l'inizio di validità dei documenti in base alla frequenza (14-01-2013)
|
||||||
TDate data_inizio(1, 1, data_fine.year());
|
TDate data_inizio(1, 1, data_fine.year());
|
||||||
const int mese = data_fine.month();
|
const int mese = data_fine.month();
|
||||||
|
int pdef = 0;
|
||||||
switch (contratto.frequenza())
|
switch (contratto.frequenza())
|
||||||
{
|
{
|
||||||
case 'M': data_inizio.set_month(mese); break; // Solo contratti NOLO
|
case 'M': pdef = 0; data_inizio.set_month(mese); break; // Solo contratti NOLO
|
||||||
case 'S': data_inizio.set_month(mese > 6 ? 7 : 1); break;
|
case 'S': pdef = 2; data_inizio.set_month(mese > 6 ? 7 : 1); break;
|
||||||
case 'T': data_inizio.set_month(max(1, mese-2)); break;
|
case 'T': pdef = 1; data_inizio.set_month(max(1, mese-2)); break;
|
||||||
default: break;
|
default : pdef = 3; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Elabora solo i documenti che ricadano nell'intervallo valido
|
// Elabora solo i documenti che ricadano nell'intervallo valido
|
||||||
if (datadoc >= data_inizio && datadoc <= data_fine)
|
if (datadoc >= data_inizio && datadoc <= data_fine && olddoc2[pdef] <= ' ')
|
||||||
elaborato |= aggiorna_contratto(*rdoc, contratto, log);
|
{
|
||||||
|
if (aggiorna_contratto(*rdoc, contratto, log))
|
||||||
|
{
|
||||||
|
switch (contratto.frequenza())
|
||||||
|
{
|
||||||
|
case 'A': elaborato |= 0x8; break;
|
||||||
|
case 'S': elaborato |= 0x4; break;
|
||||||
|
case 'T': elaborato |= 0x2; break;
|
||||||
|
default : elaborato |= 0x1; break; // Solo contratti NOLO
|
||||||
|
}
|
||||||
|
if (deve_generare_nac(contratto, data_fine))
|
||||||
|
newdoc2.overwrite("X", pdef, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
} //for(int i..
|
} //for(int i..
|
||||||
} //FOR_EACH...
|
} //FOR_EACH...
|
||||||
|
|
||||||
|
if (newdoc2 != olddoc2)
|
||||||
|
curr_doc.put(DOC_DOC2, newdoc2);
|
||||||
|
|
||||||
return elaborato;
|
return elaborato;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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& fat_nolo, TLog_report& log)
|
TAssoc_array& fat_nolo, TArray& documenti_cliente, TLog_report& log)
|
||||||
{
|
{
|
||||||
|
bool una_nac_definitiva = false;
|
||||||
|
|
||||||
if (contratti_cliente.empty())
|
if (contratti_cliente.empty())
|
||||||
return false;
|
return una_nac_definitiva;
|
||||||
|
|
||||||
//si informa se l'elaborazione è definitiva o meno
|
//si informa se l'elaborazione è definitiva o meno
|
||||||
const bool definitivo = mask.get_bool(F_DEFINITIVO);
|
const bool definitivo = mask.get_bool(F_DEFINITIVO);
|
||||||
@ -593,6 +628,8 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
default : break;
|
default : break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool nac_ok = deve_generare_nac(contratto, data_fine);
|
||||||
|
|
||||||
TString80 freq = "";
|
TString80 freq = "";
|
||||||
switch (contratto.frequenza())
|
switch (contratto.frequenza())
|
||||||
{
|
{
|
||||||
@ -603,7 +640,6 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
default : break;
|
default : break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool nac_ok = deve_generare_nac(contratto, data_fine);
|
|
||||||
//segnaliamo l'elaborazione del contratto sul log
|
//segnaliamo l'elaborazione del contratto sul log
|
||||||
TString log_msg;
|
TString log_msg;
|
||||||
log_msg.format(FR("Cliente:%ld Contratto:%ld %s %s"), codcf, ndoc, (const char*)tip, (const char*)freq);
|
log_msg.format(FR("Cliente:%ld Contratto:%ld %s %s"), codcf, ndoc, (const char*)tip, (const char*)freq);
|
||||||
@ -688,7 +724,6 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
else
|
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
|
||||||
@ -814,7 +849,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
|
|
||||||
// CONTRATTO
|
// CONTRATTO
|
||||||
|
|
||||||
//se il contratto è di tipo A/R aggiorna la riga spese speciale (verigh02)
|
//se il contratto è di tipo A/R aggiorna la riga spese speciale (verig02)
|
||||||
if (err == NOERR) switch (tipo_contratto)
|
if (err == NOERR) switch (tipo_contratto)
|
||||||
{
|
{
|
||||||
case 'A':
|
case 'A':
|
||||||
@ -853,13 +888,16 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
|
|
||||||
// se non ci sono errori -> in caso di elaborazione definitiva procede alla registrazione..
|
// se non ci sono errori -> in caso di elaborazione definitiva procede alla registrazione..
|
||||||
//.. del contratto (ricordiamo che in memoria il contratto ha già le righe aggiornate
|
//.. del contratto (ricordiamo che in memoria il contratto ha già le righe aggiornate
|
||||||
if (err == NOERR && definitivo)
|
if (err == NOERR && definitivo && nac_ok)
|
||||||
{
|
{
|
||||||
//alla fine della fiera aggiorna il contratto
|
//alla fine della fiera aggiorna il contratto
|
||||||
err = contratto.rewrite();
|
err = contratto.rewrite();
|
||||||
|
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
|
{
|
||||||
log_msg << " -- Contratto aggiornato";
|
log_msg << " -- Contratto aggiornato";
|
||||||
|
una_nac_definitiva = true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
log_msg << " -- Impossibile aggiornare contratto: errore " << err;
|
log_msg << " -- Impossibile aggiornare contratto: errore " << err;
|
||||||
}
|
}
|
||||||
@ -873,9 +911,29 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
|
|
||||||
|
|
||||||
} //FOR_EACH_ARRAY_ITEM(... giro sui contratti cliente
|
} //FOR_EACH_ARRAY_ITEM(... giro sui contratti cliente
|
||||||
|
|
||||||
|
if (una_nac_definitiva)
|
||||||
|
{
|
||||||
|
const int tc = mask.get_int(F_TIPOCONTR); // 0x7 (tutti tranne nolo) o 0x8 (solo nolo)
|
||||||
|
if (tc != 0x8)
|
||||||
|
{
|
||||||
|
const TString4 stato_finale = ini_get_string(CONFIG_DITTA, "ha", "StatoFinFatt");
|
||||||
|
FOR_EACH_ARRAY_ITEM(documenti_cliente, r, riga)
|
||||||
|
{
|
||||||
|
TDocumento& fattura = *(TDocumento*)riga;
|
||||||
|
// fattura.put(DOC_STATO, stato_finale);
|
||||||
|
fattura.rewrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
TString msg;
|
||||||
|
msg.format(FR("Aggiornato stato elaborazione di %d fatture"), documenti_cliente.items());
|
||||||
|
log.log(0, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//il metodo ritornerà il successo o meno della registrazione
|
//il metodo ritornerà il successo o meno della registrazione
|
||||||
return true;
|
return una_nac_definitiva;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& fat_nolo, TLog_report& log)
|
bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto, TToken_string& fat_nolo, TLog_report& log)
|
||||||
@ -1033,25 +1091,29 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
if (tc & 0x8) // Elaborazione nolo?
|
if (tc & 0x8) // Elaborazione nolo?
|
||||||
{
|
{
|
||||||
// Elabora tutti i contratti di nolo per generare fatture ed effetti
|
// 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);
|
const word freq = find_contratti_cliente(mask.get_long(F_CODCF), mask, 0x8, contratti_cliente);
|
||||||
FOR_EACH_ARRAY_ROW(contratti_cliente, n_nolo, r_nolo)
|
if (freq) // Nolo sarebbe solo mensile -> if (freq == 0x01)
|
||||||
{
|
{
|
||||||
TContratto_premi& contratto = *(TContratto_premi*)r_nolo;
|
FOR_EACH_ARRAY_ROW(contratti_cliente, n_nolo, r_nolo)
|
||||||
|
|
||||||
TToken_string fatkey;
|
|
||||||
if (genera_fat(mask, contratto, fatkey, log))
|
|
||||||
{
|
{
|
||||||
TToken_string cnkey; // Chiave contratto
|
TContratto_premi& contratto = *(TContratto_premi*)r_nolo;
|
||||||
cnkey.add(contratto.get(DOC_PROVV));
|
|
||||||
cnkey.add(contratto.get(DOC_ANNO));
|
TToken_string fatkey;
|
||||||
cnkey.add(contratto.get(DOC_CODNUM));
|
if (genera_fat(mask, contratto, fatkey, log))
|
||||||
cnkey.add(contratto.get(DOC_NDOC));
|
{
|
||||||
fat_nolo.add(cnkey, fatkey);
|
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)
|
||||||
|
const TDate data_fine = mask.get(F_ADATA);
|
||||||
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
|
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
|
||||||
{
|
{
|
||||||
if (!pi.addstatus(1))
|
if (!pi.addstatus(1))
|
||||||
@ -1063,13 +1125,13 @@ 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, fat_nolo, log);
|
genera_nac(mask, contratti_cliente, fat_nolo, documenti_cliente, 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;
|
||||||
|
documenti_cliente.destroy();
|
||||||
const int n_contratti = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
|
const word freq = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
|
||||||
if (n_contratti > 0)
|
if (freq != 0)
|
||||||
{
|
{
|
||||||
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);
|
||||||
@ -1077,14 +1139,16 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!contratti_cliente.empty())
|
if (!contratti_cliente.empty()) // Test sulla presenza di contratti
|
||||||
{
|
{
|
||||||
const TDate data_fine = mask.get(F_ADATA);
|
const TRectype& head = fatture.cursor()->curr();
|
||||||
|
|
||||||
//se ha trovato uno o più contratti validi nel periodo passa alla elaborazione dei documenti del cliente
|
//se ha trovato uno o più contratti validi nel periodo passa alla elaborazione dei documenti del cliente
|
||||||
TDocumento* curr_doc = new TDocumento(fatture.cursor()->curr());
|
TDocumento* curr_doc = new TDocumento(head);
|
||||||
//elabora il documento corrente aggiornando le somme restituite sui contratti validi
|
|
||||||
if (elabora_contratti(*curr_doc, contratti_cliente, data_fine, log))
|
// elabora il documento corrente aggiornando le somme restituite sui contratti validi
|
||||||
|
const word freq = elabora_contratti(*curr_doc, contratti_cliente, data_fine, log);
|
||||||
|
if (freq != 0)
|
||||||
documenti_cliente.add(curr_doc);
|
documenti_cliente.add(curr_doc);
|
||||||
else
|
else
|
||||||
delete(curr_doc);
|
delete(curr_doc);
|
||||||
@ -1092,20 +1156,10 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
} //for (bool ok = recset.move_first()...
|
} //for (bool ok = recset.move_first()...
|
||||||
|
|
||||||
//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() && !documenti_cliente.empty())
|
||||||
genera_nac(mask, contratti_cliente, fat_nolo, log);
|
|
||||||
|
|
||||||
// se elaborazione definitiva NON di nolo-> cambia lo stato ai documenti di vendita elaborati
|
|
||||||
const bool definitivo = mask.get_bool(F_DEFINITIVO) && ((tc & 0x8) == 0);
|
|
||||||
if (definitivo && !documenti_cliente.empty())
|
|
||||||
{
|
{
|
||||||
const TString4 stato_finale = ini_get_string(CONFIG_DITTA, "ha", "StatoFinFatt");
|
genera_nac(mask, contratti_cliente, fat_nolo, documenti_cliente, log);
|
||||||
FOR_EACH_ARRAY_ITEM(documenti_cliente, r, riga)
|
documenti_cliente.destroy();
|
||||||
{
|
|
||||||
TDocumento& fattura = *(TDocumento*)riga;
|
|
||||||
fattura.put(DOC_STATO, stato_finale);
|
|
||||||
fattura.rewrite();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user