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