Corretta generazione NAC
git-svn-id: svn://10.65.10.50/branches/R_10_00@22725 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
61e142c92b
commit
f66abac470
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include "ha0.h"
|
#include "ha0.h"
|
||||||
|
|
||||||
|
|
||||||
int main(int argc,char** argv)
|
int main(int argc,char** argv)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -16,6 +15,7 @@ int main(int argc,char** argv)
|
|||||||
case 3: rt = ha0400(argc, argv); break; // elaborazione contratti premio pareggiati
|
case 3: rt = ha0400(argc, argv); break; // elaborazione contratti premio pareggiati
|
||||||
case 4: rt = ha0500(argc, argv); break; // elaborazione documenti (NAC - contratti premio)
|
case 4: rt = ha0500(argc, argv); break; // elaborazione documenti (NAC - contratti premio)
|
||||||
case 5: rt = ha0600(argc, argv); break; // gestione codici corrispondenti
|
case 5: rt = ha0600(argc, argv); break; // gestione codici corrispondenti
|
||||||
|
case 6: rt = ha0700(argc, argv); break; // elaborazione differita nac definitive
|
||||||
default: rt = ha0100(argc, argv); break; // gestore tabelle modulo HA
|
default: rt = ha0100(argc, argv); break; // gestore tabelle modulo HA
|
||||||
}
|
}
|
||||||
return rt;
|
return rt;
|
||||||
|
1
ha/ha0.h
1
ha/ha0.h
@ -4,3 +4,4 @@ int ha0300(int argc, char* argv[]);
|
|||||||
int ha0400(int argc, char* argv[]);
|
int ha0400(int argc, char* argv[]);
|
||||||
int ha0500(int argc, char* argv[]);
|
int ha0500(int argc, char* argv[]);
|
||||||
int ha0600(int argc, char* argv[]);
|
int ha0600(int argc, char* argv[]);
|
||||||
|
int ha0700(int argc, char* argv[]);
|
||||||
|
@ -347,16 +347,14 @@ bool THardy_tied_mask::on_field_event(TOperable_field& o, TField_event e, long j
|
|||||||
//toolbar
|
//toolbar
|
||||||
case DLG_CHECKALL:
|
case DLG_CHECKALL:
|
||||||
if (e == fe_button)
|
if (e == fe_button)
|
||||||
{
|
|
||||||
check_all(!one_checked());
|
check_all(!one_checked());
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLG_OK:
|
case DLG_OK:
|
||||||
if (e == fe_button)
|
if (e == fe_button)
|
||||||
{
|
{
|
||||||
//già che ci siamo mettiamoci pure un log di elaborazione
|
//già che ci siamo mettiamoci pure un log di elaborazione
|
||||||
TLog_report log("Elaborazione contratti selezionati");
|
TLog_report log(TR("Elaborazione contratti selezionati"));
|
||||||
log.kill_duplicates();
|
log.kill_duplicates();
|
||||||
log.log(0, "");
|
log.log(0, "");
|
||||||
TSheet_field& righe = sfield(F_RIGHE);
|
TSheet_field& righe = sfield(F_RIGHE);
|
||||||
|
@ -115,8 +115,8 @@ protected:
|
|||||||
void elabora_documenti(const TMask& mask, TISAM_recordset& recset, TLog_report& log);
|
void elabora_documenti(const TMask& mask, TISAM_recordset& recset, TLog_report& log);
|
||||||
|
|
||||||
//metodi medio livello
|
//metodi medio livello
|
||||||
bool aggiorna_contratti(const TRiga_documento& rdoc, TContratto_premi& contratto);
|
bool aggiorna_contratti(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log);
|
||||||
bool elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente);
|
bool elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, TLog_report& log);
|
||||||
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log);
|
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log);
|
||||||
|
|
||||||
//metodi basso livello
|
//metodi basso livello
|
||||||
@ -219,7 +219,7 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
|
|||||||
query << "USE DOC KEY " << key;
|
query << "USE DOC KEY " << key;
|
||||||
//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)&&(STATO<'9')";
|
||||||
|
|
||||||
//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");
|
||||||
@ -377,13 +377,12 @@ int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& m
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TContratto_premi& contratto)
|
bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log)
|
||||||
{
|
{
|
||||||
bool elaborato = false;
|
bool elaborato = false;
|
||||||
const char tipo_contratto = contratto.tipo_contratto();
|
const char tipo_contratto = contratto.tipo_contratto();
|
||||||
//parametri della riga fattura
|
//parametri della riga fattura
|
||||||
TString80 rdoc_codart = rdoc.get(RDOC_CODART);
|
TString80 rdoc_codart = rdoc.get(RDOC_CODART); rdoc_codart.trim();
|
||||||
rdoc_codart.trim();
|
|
||||||
const real rdoc_qta = rdoc.get_real(RDOC_QTA);
|
const real rdoc_qta = rdoc.get_real(RDOC_QTA);
|
||||||
const TString4 rdoc_umqta = rdoc.get(RDOC_UMQTA);
|
const TString4 rdoc_umqta = rdoc.get(RDOC_UMQTA);
|
||||||
|
|
||||||
@ -410,19 +409,12 @@ bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TContratt
|
|||||||
//cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
|
//cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
|
||||||
if (rigacontratto->is_spese())
|
if (rigacontratto->is_spese())
|
||||||
{
|
{
|
||||||
//si informa su quale fosse la somma anticipata
|
|
||||||
const real somma_anticipata = rigacontratto->get_real(RCA_2_ANTICIPATO);
|
|
||||||
//aggiorna la somma restituita dovuta al contratto (parte da zero per ogni elaborazione di NAC)
|
|
||||||
real somma_restituita = rigacontratto->get_real(RCA_2_RESO_CORRENTE);
|
|
||||||
//controlla che il contratto non sia per caso già stato pareggiato! quindi il reso deve essere < dell'anticipato per procedere
|
|
||||||
|
|
||||||
//la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame...
|
//la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame...
|
||||||
//..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame
|
//..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame
|
||||||
somma_restituita += normalized_rdoc_qta * rigamerce_premio;
|
const real reso = normalized_rdoc_qta * rigamerce_premio;
|
||||||
rigacontratto->put(RCA_2_RESO_CORRENTE, somma_restituita);
|
rigacontratto->add(RCA_2_RESO_CORRENTE, reso);
|
||||||
elaborato = true;
|
elaborato = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
} //FOR_EACH_PHYSICAL.. fine casino sulla riga di tipo spese
|
} //FOR_EACH_PHYSICAL.. fine casino sulla riga di tipo spese
|
||||||
|
|
||||||
@ -431,13 +423,17 @@ bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TContratt
|
|||||||
//questo va bene invece per ogni riga merce (verigh01), sia per contratti di tipo A/R che di tipo P
|
//questo va bene invece per ogni riga merce (verigh01), sia per contratti di tipo A/R che di tipo P
|
||||||
if (rigamerce->is_merce())
|
if (rigamerce->is_merce())
|
||||||
{
|
{
|
||||||
real somma_bonus = rigamerce->get_real(RC_1_BONUS);
|
const real bonus = normalized_rdoc_qta * rigamerce_premio;
|
||||||
somma_bonus += normalized_rdoc_qta * rigamerce_premio;
|
rigamerce->add(RC_1_BONUS, bonus);
|
||||||
rigamerce->put(RC_1_BONUS, somma_bonus);
|
|
||||||
|
|
||||||
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto
|
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto
|
||||||
|
|
||||||
elaborato = true;
|
elaborato = true;
|
||||||
|
|
||||||
|
TString msg;
|
||||||
|
msg.format("Documento %d/%s %ld - %s: %s %s -> Bonus %s su contratto %d/%s %ld",
|
||||||
|
rdoc.get_int(RDOC_ANNO), (const char*)rdoc.get(RDOC_CODNUM), rdoc.get_long(RDOC_NDOC),
|
||||||
|
(const char*)rdoc_codart, normalized_rdoc_qta.stringa(4, 0), (const char*)rdoc_umqta, bonus.stringa(7,2),
|
||||||
|
contratto.get_int(DOC_ANNO), (const char*)contratto.get(DOC_CODNUM), contratto.get_long(DOC_NDOC));
|
||||||
|
log.log(0, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
} //if(rigamerce_premio != ZERO...
|
} //if(rigamerce_premio != ZERO...
|
||||||
@ -448,25 +444,19 @@ bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TContratt
|
|||||||
return elaborato;
|
return elaborato;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//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)
|
bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, TLog_report& log)
|
||||||
{
|
{
|
||||||
bool elaborato = false;
|
bool elaborato = false;
|
||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
TString80 rdoc_codart = rdoc->get(RDOC_CODART); //non si riesce ad usare un TString& perchè lo perde dopo un pò
|
|
||||||
rdoc_codart.trim();
|
|
||||||
const real rdoc_qta = rdoc->quantita();
|
|
||||||
|
|
||||||
//controlla se il codart della riga esiste in uno dei contratti validi
|
//controlla se il codart della riga esiste in uno dei contratti validi
|
||||||
for (int i = 0; i < contratti_cliente.items(); i++)
|
for (int i = 0; i < contratti_cliente.items(); i++)
|
||||||
{
|
{
|
||||||
TContratto_premi& contratto = (TContratto_premi&)contratti_cliente[i];
|
TContratto_premi& contratto = (TContratto_premi&)contratti_cliente[i];
|
||||||
elaborato |= aggiorna_contratti(*rdoc, contratto);
|
elaborato |= aggiorna_contratti(*rdoc, contratto, log);
|
||||||
} //for(int i..
|
} //for(int i..
|
||||||
} //FOR_EACH...
|
} //FOR_EACH...
|
||||||
|
|
||||||
@ -474,7 +464,7 @@ bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log)
|
bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& /*documenti_cliente*/, TLog_report& log)
|
||||||
{
|
{
|
||||||
//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);
|
||||||
@ -493,7 +483,6 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
|
|
||||||
// generazione del documento NAC dal contratto
|
// generazione del documento NAC dal contratto
|
||||||
// -------------------------------------------
|
// -------------------------------------------
|
||||||
|
|
||||||
// TESTATA
|
// TESTATA
|
||||||
|
|
||||||
//alcuni parametri delle righe vanno presi dalla configurazione
|
//alcuni parametri delle righe vanno presi dalla configurazione
|
||||||
@ -532,9 +521,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
const int anno = mask.get_date(F_ADATA).year();
|
const int anno = mask.get_date(F_ADATA).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
|
||||||
char provv = 'P';
|
const char provv = definitivo ? 'D' : 'P';
|
||||||
if (definitivo)
|
|
||||||
provv = 'D';
|
|
||||||
|
|
||||||
TDocumento nac(provv, anno, nac_codnum, 0); //num_doc = 0 perchè viene aggiornato in fase di registrazione
|
TDocumento nac(provv, anno, nac_codnum, 0); //num_doc = 0 perchè viene aggiornato in fase di registrazione
|
||||||
nac.set_tipo(nac_tipo);
|
nac.set_tipo(nac_tipo);
|
||||||
@ -595,7 +582,10 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
|
|
||||||
//iva
|
//iva
|
||||||
nac_row.put(RDOC_CODIVA, codiva);
|
nac_row.put(RDOC_CODIVA, codiva);
|
||||||
}
|
|
||||||
|
//Imposta riga contratto di provenienza
|
||||||
|
nac_row.set_original_rdoc_key(riga_contratto);
|
||||||
|
} else
|
||||||
|
|
||||||
//trattazione speciale delle righe spese (verigh02) (solo 'A'nticipi e 'R'ifatturazioni)
|
//trattazione speciale delle righe spese (verigh02) (solo 'A'nticipi e 'R'ifatturazioni)
|
||||||
if (tiporiga == HARDY_TIPORIGA_SOMMA && (tipo_contratto == 'A' || tipo_contratto == 'R'))
|
if (tiporiga == HARDY_TIPORIGA_SOMMA && (tipo_contratto == 'A' || tipo_contratto == 'R'))
|
||||||
@ -638,6 +628,8 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
|||||||
//iva
|
//iva
|
||||||
nac_row.put(RDOC_CODIVA, codiva);
|
nac_row.put(RDOC_CODIVA, codiva);
|
||||||
|
|
||||||
|
//Imposta riga contratto di provenienza
|
||||||
|
nac_row.set_original_rdoc_key(riga_contratto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -730,6 +722,10 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
//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;
|
||||||
|
|
||||||
|
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, contratti_cliente);
|
const int n_contratti = find_contratti_cliente(codcf, mask, contratti_cliente);
|
||||||
if (n_contratti == 0)
|
if (n_contratti == 0)
|
||||||
{
|
{
|
||||||
@ -744,7 +740,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
|
|||||||
//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(fatture.cursor()->curr());
|
||||||
//elabora il documento corrente aggiornando le somme restituite sui contratti validi
|
//elabora il documento corrente aggiornando le somme restituite sui contratti validi
|
||||||
if (elabora_contratti(*curr_doc, contratti_cliente))
|
if (elabora_contratti(*curr_doc, contratti_cliente, log))
|
||||||
documenti_cliente.add(curr_doc);
|
documenti_cliente.add(curr_doc);
|
||||||
else
|
else
|
||||||
delete(curr_doc);
|
delete(curr_doc);
|
||||||
|
164
ha/ha0700.cpp
Normal file
164
ha/ha0700.cpp
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
#include "halib.h"
|
||||||
|
|
||||||
|
#include "../ve/velib04.h"
|
||||||
|
|
||||||
|
class TElaborazione_NAC_definitive : public TElaborazione
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
int find_contratti_cliente(long codcfatt, const TDate& data_elab, TArray& contratti_cliente);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
||||||
|
const TDate& data_elab, bool interattivo);
|
||||||
|
|
||||||
|
TElaborazione_NAC_definitive(const TString& codelab) : TElaborazione(codelab) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
//metodo che riempie un array con tutti i contratti del cliente passatogli (in base alla tipologia di contratti da elaborare)
|
||||||
|
int TElaborazione_NAC_definitive::find_contratti_cliente(long codcfatt, const TDate& data_elab,
|
||||||
|
TArray& contratti_cliente)
|
||||||
|
{
|
||||||
|
contratti_cliente.destroy();
|
||||||
|
|
||||||
|
//settaggio delle variabili
|
||||||
|
//il codice numerazione lo trova nella configurazione Hardy, e lo deve scegliere in base alla tipologia di contratti che sta esaminando!
|
||||||
|
TConfig config(CONFIG_DITTA, "ha");
|
||||||
|
|
||||||
|
const TString4 tip_ant = config.get("CoAntTip");
|
||||||
|
const TString4 tip_rifa = config.get("CoRifaTip");
|
||||||
|
const TString4 tip_post = config.get("CoPostTip");
|
||||||
|
|
||||||
|
TAssoc_array cod_num_cont;
|
||||||
|
cod_num_cont.add(config.get("CoAntNum"));
|
||||||
|
cod_num_cont.add(config.get("CoRifaNum"));
|
||||||
|
cod_num_cont.add(config.get("CoPostNum"));
|
||||||
|
|
||||||
|
FOR_EACH_ASSOC_OBJECT(cod_num_cont, h, k, o)
|
||||||
|
{
|
||||||
|
//deve cercare tutti i contratti del cliente e metterli nell'array
|
||||||
|
TString query;
|
||||||
|
query << "USE DOC KEY 5";
|
||||||
|
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))&&(STR(DOC2=#CODCF))";
|
||||||
|
query << "\nFROM PROVV=D CODNUM=" << k;
|
||||||
|
query << "\nTO PROVV=D CODNUM=" << k;
|
||||||
|
|
||||||
|
TISAM_recordset recset(query);
|
||||||
|
|
||||||
|
recset.set_var("#A_TIPODOC", tip_ant);
|
||||||
|
recset.set_var("#R_TIPODOC", tip_rifa);
|
||||||
|
recset.set_var("#P_TIPODOC", tip_post);
|
||||||
|
|
||||||
|
recset.set_var("#CODCF", codcfatt);
|
||||||
|
|
||||||
|
const long n_contratti = recset.items(); //questo serve solo al sagace programmatore
|
||||||
|
|
||||||
|
//aggiunge i contratti all'array: solo quelli in auge nel periodo di calcolo selezionato sulla maschera!
|
||||||
|
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||||
|
{
|
||||||
|
//contratti anticipo 'A': datainizio esiste sempre, datafine non esiste (va ad esaurimento)
|
||||||
|
//contratti posticipo 'P': datainizio esiste sempre, datafine può non esistere
|
||||||
|
//contratti rifatturazione 'R': come contratti anticipo
|
||||||
|
|
||||||
|
//controlla validità del contratto con le date scelte per l'elaborazione dei documenti
|
||||||
|
const TDate data_ini_contratto = recset.get(DOC_DATACOMP).as_date();
|
||||||
|
|
||||||
|
//quindi la datainizio vale per tutti allo stesso modo (è obbligatoria nei contratti)
|
||||||
|
//se l'elaborazione finisce prima che cominci il contratto -> il contratto non serve a nulla
|
||||||
|
if (data_ini_contratto > data_elab)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//la data fine vale invece solo per i contratti 'P' e potrebbe non esserci (contratti senza scadenza)
|
||||||
|
TDate data_fine_contratto;
|
||||||
|
|
||||||
|
//se la data fine contratto non è valida (ma è presente!) non dobbiamo fare nulla, perchè il contratto non va elaborato
|
||||||
|
data_fine_contratto = recset.get(DOC_DATAFCOMP).as_date();
|
||||||
|
if (data_fine_contratto.ok())
|
||||||
|
{
|
||||||
|
if (data_fine_contratto < data_elab)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
TContratto_premi* curr_contratto = new TContratto_premi(recset.cursor()->curr());
|
||||||
|
contratti_cliente.add(curr_contratto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return contratti_cliente.items();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TElaborazione_NAC_definitive::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
||||||
|
const TDate& data_elab, bool interattivo)
|
||||||
|
{
|
||||||
|
TArray contratti;
|
||||||
|
bool done = false;
|
||||||
|
for (int i = 0; i < doc_in.items(); i++)
|
||||||
|
{
|
||||||
|
TDocumento& doc = doc_in[i];
|
||||||
|
const long codcf = doc.codcf();
|
||||||
|
const TDate data = doc.get(DOC_DATADOC);
|
||||||
|
|
||||||
|
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
|
||||||
|
{
|
||||||
|
const TRectype* contr = rdoc->find_original_doc();
|
||||||
|
if (contr == NULL && find_contratti_cliente(codcf, data, contratti) == 1)
|
||||||
|
contr = (TContratto_premi*)contratti.objptr(0);
|
||||||
|
|
||||||
|
if (contr)
|
||||||
|
{
|
||||||
|
TContratto_premi cp(*contr);
|
||||||
|
FOR_EACH_PHYSICAL_RDOC_BACK(cp, c, rc)
|
||||||
|
{
|
||||||
|
if (rc->tipo().codice() == HARDY_TIPORIGA_SOMMA)
|
||||||
|
{
|
||||||
|
rc->add(RCA_2_RESO_STORICO, rdoc->importo(false, false, 2));
|
||||||
|
done = cp.rewrite() == NOERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// main
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TNac_def_app : public TSkeleton_application
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void main_loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void TNac_def_app::main_loop()
|
||||||
|
{
|
||||||
|
if (argc() >= 2 && toupper(argv(2)[1]) == 'I')
|
||||||
|
{
|
||||||
|
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_DOC, LF_RIGHEDOC, 0);
|
||||||
|
TConfig ini(argv(2)+2, "Transaction");
|
||||||
|
const TString16 codelab = ini.get("Action");
|
||||||
|
ini.set_paragraph("33");
|
||||||
|
const char provv = ini.get_char(DOC_PROVV);
|
||||||
|
const int anno = ini.get_int(DOC_ANNO);
|
||||||
|
const TString4 codnum = ini.get(DOC_CODNUM);
|
||||||
|
const long ndoc = ini.get_long(DOC_NDOC);
|
||||||
|
TDocumento* doc = new TDocumento(provv, anno, codnum, ndoc);
|
||||||
|
|
||||||
|
TLista_documenti doc_in, doc_out;
|
||||||
|
doc_in.add(doc);
|
||||||
|
|
||||||
|
const TDate oggi(TODAY);
|
||||||
|
TElaborazione_NAC_definitive end(codelab);
|
||||||
|
const bool done = end.elabora(doc_in, doc_out, oggi, false);
|
||||||
|
|
||||||
|
ini.set("Result", done ? "SUCCESS" : "ERROR", "Transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int ha0700(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TNac_def_app app;
|
||||||
|
app.run(argc, argv, TR("NAC definitive"));
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,10 +1,6 @@
|
|||||||
#include <xvt.h>
|
#include <xvt.h>
|
||||||
#include <checks.h>
|
|
||||||
|
|
||||||
#include "ha3.h"
|
#include "ha3.h"
|
||||||
|
|
||||||
#define usage "Error - usage : %s -{0|6|7|8}"
|
|
||||||
|
|
||||||
int main(int argc,char** argv)
|
int main(int argc,char** argv)
|
||||||
{
|
{
|
||||||
int rt = -1 ;
|
int rt = -1 ;
|
||||||
@ -12,11 +8,10 @@ int main(int argc,char** argv)
|
|||||||
|
|
||||||
switch (r)
|
switch (r)
|
||||||
{
|
{
|
||||||
case 0: rt = ha3100(argc, argv); break; //Gestione giri
|
|
||||||
case 6: rt = ha3700(argc, argv); break; //Stampa storico
|
case 6: rt = ha3700(argc, argv); break; //Stampa storico
|
||||||
case 7: rt = ha3800(argc, argv); break; //Inserimento righe storico da documenti
|
case 7: rt = ha3800(argc, argv); break; //Inserimento righe storico da documenti
|
||||||
case 8: rt = ha3900(argc, argv); break; //Gestione storico attrezzature
|
case 8: rt = ha3900(argc, argv); break; //Gestione storico attrezzature
|
||||||
default: error_box(usage, argv[0]); break;
|
default: rt = ha3100(argc, argv); break; //Gestione giri
|
||||||
}
|
}
|
||||||
return rt;
|
return rt;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user