Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/branches/R_10_00@20851 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
91fb140565
commit
fa2d23ce2b
@ -46,7 +46,6 @@
|
||||
//S_RICARICO QTAGG2 H01
|
||||
//S_MATURATO QTAGG5 H01
|
||||
|
||||
// QTAGG3 H01 - H02 -> usato come campo di appoggio per gli importi in elaborazione ha0500
|
||||
//F_ANTICIPATO QTAGG4 H02
|
||||
//F_RESTITUITO QTAGG5 H02
|
||||
|
||||
|
150
ha/ha0500.cpp
150
ha/ha0500.cpp
@ -126,9 +126,8 @@ protected:
|
||||
void elabora_documenti(const TMask& mask, TISAM_recordset& recset, TLog_report& log);
|
||||
|
||||
//metodi medio livello
|
||||
bool aggiorna_contratti_anticipo(const TString& rdoc_codart, const real& rdoc_qta, TDocumento& contratto);
|
||||
bool aggiorna_contratti_posticipo(const TString& rdoc_codart, const real& rdoc_qta, TDocumento& contratto);
|
||||
bool aggiorna_contratti(TDocumento& curr_doc, TArray& contratti_cliente);
|
||||
bool aggiorna_contratti(const TRiga_documento& rdoc, TDocumento& contratto);
|
||||
bool elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente);
|
||||
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log);
|
||||
|
||||
//metodi basso livello
|
||||
@ -384,9 +383,15 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
|
||||
}
|
||||
|
||||
|
||||
bool THardy_elab_docs::aggiorna_contratti_anticipo(const TString& rdoc_codart, const real& rdoc_qta, TDocumento& contratto)
|
||||
bool THardy_elab_docs::aggiorna_contratti(const TRiga_documento& rdoc, TDocumento& contratto)
|
||||
{
|
||||
bool elaborato = false;
|
||||
const char tipo_contratto = contratto.get(DOC_TIPOCFFATT)[0];
|
||||
//parametri della riga fattura
|
||||
TString80 rdoc_codart = rdoc.get(RDOC_CODART);
|
||||
rdoc_codart.trim();
|
||||
const real rdoc_qta = rdoc.get_real(RDOC_QTA);
|
||||
const TString4 rdoc_umqta = rdoc.get(RDOC_UMQTA);
|
||||
|
||||
FOR_EACH_PHYSICAL_RDOC(contratto, rm, rigamerce)
|
||||
{
|
||||
@ -395,41 +400,49 @@ bool THardy_elab_docs::aggiorna_contratti_anticipo(const TString& rdoc_codart, c
|
||||
if (rdoc_codart == rigamerce_codart)
|
||||
{
|
||||
const real rigamerce_premio = rigamerce->get_real(RC_1_PREMIO);
|
||||
//se il premio non è nullo procede all'aggiornamento del restituito
|
||||
//se il premio non è nullo procede all'aggiornamento del restituito (solo contratti A/R e righe spese) e del bonus (tutti i contratti e righe merce)
|
||||
if (rigamerce_premio != ZERO)
|
||||
{
|
||||
//aggiornamento delle righe di tipo spesa (verigH02) per aggiornare le somme restituite
|
||||
FOR_EACH_PHYSICAL_RDOC(contratto, ra, rigacontratto)
|
||||
{
|
||||
//cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
|
||||
if (rigacontratto->is_spese())
|
||||
{
|
||||
//usa qtagg3 come campo di appoggio per il calcolo della somma restituita dovuta al contratto (parte da zero per ogni elaborazione di NAC)
|
||||
real somma_restituita = rigacontratto->get_real(RCA_2_RESTITUITO);
|
||||
//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
|
||||
somma_restituita += rdoc_qta * rigamerce_premio;
|
||||
rigacontratto->put(RCA_2_RESTITUITO, somma_restituita);
|
||||
elaborato = true;
|
||||
}
|
||||
} //FOR_EACH_PHYSICAL.. fine casino sulla riga di tipo spese
|
||||
//normalizzazione della qta
|
||||
const TString& umqta_tot = rigamerce->get(RDOC_UMQTA); //prende la UM dal contratto che farà da riferimento!
|
||||
TArticolo articolo(rdoc_codart);
|
||||
const real normalized_rdoc_qta = articolo.convert_to_um(rdoc_qta, umqta_tot, rdoc_umqta, true);
|
||||
|
||||
//aggiornamento delle righe di tipo spesa (verigh02) per aggiornare le somme restituite nel caso di contratti di anticipo/rifatturazione
|
||||
if (tipo_contratto == 'A' || tipo_contratto == 'R')
|
||||
{
|
||||
FOR_EACH_PHYSICAL_RDOC(contratto, ra, rigacontratto)
|
||||
{
|
||||
//cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
|
||||
if (rigacontratto->is_spese())
|
||||
{
|
||||
//aggiorna la somma restituita dovuta al contratto (parte da zero per ogni elaborazione di NAC)
|
||||
real somma_restituita = rigacontratto->get_real(RCA_2_RESTITUITO);
|
||||
//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
|
||||
somma_restituita += normalized_rdoc_qta * rigamerce_premio;
|
||||
rigacontratto->put(RCA_2_RESTITUITO, somma_restituita);
|
||||
elaborato = true;
|
||||
break;
|
||||
}
|
||||
} //FOR_EACH_PHYSICAL.. fine casino sulla riga di tipo spese
|
||||
|
||||
} //if(tipo_contratto == "A"...
|
||||
|
||||
//questo va bene invece per ogni riga merce (verigh01), sia per contratti di tipo A/R che di tipo P
|
||||
if (rigamerce->is_merce())
|
||||
{
|
||||
real somma_bonus = rigamerce->get_real(RC_1_BONUS);
|
||||
somma_bonus += rdoc_qta * rigamerce_premio;
|
||||
somma_bonus += normalized_rdoc_qta * rigamerce_premio;
|
||||
rigamerce->put(RC_1_BONUS, somma_bonus);
|
||||
|
||||
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto
|
||||
|
||||
elaborato = true;
|
||||
}
|
||||
}
|
||||
|
||||
//aggiornamento delle quantità per le righe di tipo merce (verigH01)
|
||||
if (rigamerce->is_merce())
|
||||
{
|
||||
real qta_tot = rigamerce->get_real(RDOC_QTA); //prende la qta tot dal contratto (è usato un campo di appoggio RDOC_QTA)
|
||||
qta_tot += rdoc_qta; //aggiunge la qta della riga documento
|
||||
rigamerce->put(RDOC_QTA, qta_tot); //riscrive sul campo di appoggio del contratto
|
||||
}
|
||||
} //if(rigamerce_premio != ZERO...
|
||||
|
||||
|
||||
} //if(rdoc_codart...
|
||||
} //FOR_EACH_PHYSICAL..
|
||||
@ -437,43 +450,10 @@ bool THardy_elab_docs::aggiorna_contratti_anticipo(const TString& rdoc_codart, c
|
||||
}
|
||||
|
||||
|
||||
bool THardy_elab_docs::aggiorna_contratti_posticipo(const TString& rdoc_codart, const real& rdoc_qta, TDocumento& contratto)
|
||||
{
|
||||
bool elaborato = false;
|
||||
|
||||
FOR_EACH_PHYSICAL_RDOC(contratto, rm, rigamerce)
|
||||
{
|
||||
const TString& rigamerce_codart = rigamerce->get(RDOC_CODART);
|
||||
//se trova il codart in una delle righe di contratto...
|
||||
if (rdoc_codart == rigamerce_codart)
|
||||
{
|
||||
const real rigamerce_premio = rigamerce->get_real(RC_1_PREMIO);
|
||||
//..aggiorna direttamente il bonus totale per l'articolo presente sulla riga
|
||||
if (rigamerce_premio != ZERO)
|
||||
{
|
||||
//usa QTAGG3 come campo di appoggio per il calcolo della somma restituita dovuta al contratto (parte da zero per ogni elaborazione di NAC)
|
||||
real somma_bonus = rigamerce->get_real(RC_1_BONUS);
|
||||
somma_bonus += rdoc_qta * rigamerce_premio;
|
||||
rigamerce->put(RC_1_BONUS, somma_bonus);
|
||||
elaborato = true;
|
||||
} //if(rigamerce...
|
||||
|
||||
//aggiornamento delle righe di tipo merce (verigH01)
|
||||
if (rigamerce->is_merce())
|
||||
{
|
||||
real qta_tot = rigamerce->get_real(RDOC_QTA);
|
||||
qta_tot += rdoc_qta;
|
||||
rigamerce->put(RDOC_QTA, qta_tot);
|
||||
}
|
||||
|
||||
} //if(rdoc_codart...
|
||||
} //FOR_EACH_PHYSICAL..
|
||||
return elaborato;
|
||||
}
|
||||
|
||||
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi..
|
||||
//..del cliente
|
||||
bool THardy_elab_docs::aggiorna_contratti(TDocumento& curr_doc, TArray& contratti_cliente)
|
||||
bool THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente)
|
||||
{
|
||||
bool elaborato = false;
|
||||
|
||||
@ -487,17 +467,7 @@ bool THardy_elab_docs::aggiorna_contratti(TDocumento& curr_doc, TArray& contratt
|
||||
for (int i = 0; i < contratti_cliente.items(); i++)
|
||||
{
|
||||
TDocumento& contratto = (TDocumento&)contratti_cliente[i];
|
||||
const TString& tipo_contratto = contratto.get(DOC_TIPOCFFATT);
|
||||
|
||||
//in base al tipo di contratto (Anticipo/Posticipo/Rifatturazione) decide cosa fare
|
||||
if (tipo_contratto == "A" || tipo_contratto == "R")
|
||||
{
|
||||
elaborato |= aggiorna_contratti_anticipo(rdoc_codart, rdoc_qta, contratto);
|
||||
} //if(tipo_contratto...
|
||||
else if (tipo_contratto == "P")
|
||||
{
|
||||
elaborato |= aggiorna_contratti_posticipo(rdoc_codart, rdoc_qta, contratto);
|
||||
}
|
||||
elaborato |= aggiorna_contratti(*rdoc, contratto);
|
||||
} //for(int i..
|
||||
} //FOR_EACH...
|
||||
|
||||
@ -588,14 +558,11 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
{
|
||||
TString80 riga_contratto_codart = riga_contratto.get(RDOC_CODART);
|
||||
riga_contratto_codart.trim();
|
||||
const real riga_contratto_bonus = riga_contratto.get_real(RDOC_QTAGG3);
|
||||
if (riga_contratto_bonus != ZERO)
|
||||
int cazzone = 1;
|
||||
const real riga_contratto_qta = riga_contratto.get_real(RDOC_QTA);
|
||||
const TString4 riga_contratto_um = riga_contratto.get(RDOC_UMQTA);
|
||||
const real riga_contratto_premio = riga_contratto.get_real(RC_1_PREMIO);
|
||||
|
||||
// riga (dovrebbe essere un'unica riga per NAC, il cui valore sta in QTAGG3 ed è stato calcolato nella aggiorna_contratti())
|
||||
// riga (dovrebbe essere un'unica riga per NAC, il cui valore sta in QTAGG3 ed è stato calcolato nella elabora_contratti())
|
||||
TRiga_documento& nac_row = nac.new_row(tipo_riga);
|
||||
nac_row.put(RDOC_NRIGA, i);
|
||||
nac_row.put(RDOC_CODART, cod_riga);
|
||||
@ -641,7 +608,7 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
|
||||
if (definitivo && err == NOERR)
|
||||
{
|
||||
//prima di registrare il contratto vanno svuotati i campi appoggio sulle righe che sono stati usati..
|
||||
//..per qta e premi vari e riempiti nella aggiorna_contratti()
|
||||
//..per qta e premi vari e riempiti nella elabora_contratti()
|
||||
for (int i = 1; i <= contratto.rows(); i++)
|
||||
{
|
||||
TRiga_documento& riga_contratto = contratto[i];
|
||||
@ -680,7 +647,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& rec
|
||||
//array con l'insieme dei contratti e dei documenti elaborati per un singolo cliente!
|
||||
TArray contratti_cliente, documenti_cliente;
|
||||
|
||||
//giro sulle fatture (è il giro di più alto livello che viene esteso all'interno delle aggiorna_contratti)
|
||||
//giro sulle fatture (è il giro di più alto livello che viene esteso all'interno delle elabora_contratti)
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
@ -707,7 +674,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& rec
|
||||
//se ha trovato uno o più contratti validi nel periodo passa alla elaborazione dei documenti del cliente
|
||||
TDocumento* curr_doc = new TDocumento(recset.cursor()->curr());
|
||||
//elabora il documento corrente aggiornando le somme restituite sui contratti validi
|
||||
if (aggiorna_contratti(*curr_doc, contratti_cliente))
|
||||
if (elabora_contratti(*curr_doc, contratti_cliente))
|
||||
documenti_cliente.add(curr_doc);
|
||||
else
|
||||
delete(curr_doc);
|
||||
@ -716,6 +683,22 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& rec
|
||||
|
||||
//generazione NAC (una per contratto cliente)
|
||||
genera_nac(mask, contratti_cliente, documenti_cliente, log);
|
||||
|
||||
//se elaborazione definitiva -> cambia lo stato ai documenti di vendita elaborati, mettendolo uguale..
|
||||
//..a quello deciso in configurazione
|
||||
const bool definitivo = mask.get_bool(F_DEFINITIVO);
|
||||
if (definitivo)
|
||||
{
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
const TString& stato_finale = config.get("StatoFinFatt");
|
||||
FOR_EACH_ARRAY_ITEM(documenti_cliente, r, riga)
|
||||
{
|
||||
TDocumento& fattura = *(TDocumento*)riga;
|
||||
fattura.put(DOC_STATO, stato_finale);
|
||||
fattura.rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -762,11 +745,6 @@ void THardy_elab_docs::main_loop()
|
||||
|
||||
bool THardy_elab_docs::create()
|
||||
{
|
||||
//controlla se la chiave ha l'autorizzazione a questo programma (solo per hardy!)
|
||||
Tdninst dninst;
|
||||
if (!dninst.can_I_run(true))
|
||||
return error_box(TR("Programma non autorizzato!"));
|
||||
|
||||
open_files(LF_DOC, LF_RIGHEDOC, 0);
|
||||
|
||||
return TSkeleton_application::create();
|
||||
|
@ -16,5 +16,3 @@
|
||||
#define RCA_2_ANTICIPATO RDOC_QTAGG4
|
||||
#define RCA_2_RESTITUITO RDOC_QTAGG5
|
||||
|
||||
//#define RC_1_BONUS_NAC RDOC_QTAGG3
|
||||
//#define RC_2_RESO_NAC RDOC_QTAGG3
|
||||
|
Loading…
x
Reference in New Issue
Block a user