git-svn-id: svn://10.65.10.50/branches/R_10_00@22725 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			165 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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<70> non esistere
 | ||
|       //contratti rifatturazione 'R': come contratti anticipo
 | ||
| 
 | ||
|       //controlla validit<69> 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 (<28> 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 <20> valida (ma <20> presente!) non dobbiamo fare nulla, perch<63> 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;
 | ||
| }
 |