Files correlati : pd6411 Ricompilazione Demo : [ ] Commento : Se la riga no e' di tipo A1, la salto git-svn-id: svn://10.65.10.50/branches/R_10_00@21220 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| 
 | |
| #include "../ve/velib.h"
 | |
| 
 | |
|                                                     //////////////////////////////////////////
 | |
|                                                     ////    TAGGIUNGI_LISTINI_HABA_APP    ////
 | |
|                                                     //////////////////////////////////////////
 | |
| 
 | |
| //Classe TAggiungi_listini_app
 | |
| class TAggiungi_listini_haba_app : public TSkeleton_application
 | |
| {
 | |
| private:
 | |
|   TFilename _ini_name;
 | |
|     
 | |
| protected:
 | |
|   virtual bool check_autorization() const {return false;}
 | |
|   virtual const char * extra_modules() const {return "cg";}
 | |
| 
 | |
|   virtual void main_loop();
 | |
|   void check_doc();
 | |
| 
 | |
| public:
 | |
|   bool load_ini(bool check);  
 | |
| };
 | |
| 
 | |
| 
 | |
| //LOAD_INI: carica il file ini che contiene il documento
 | |
| bool TAggiungi_listini_haba_app::load_ini(bool check)
 | |
| {   
 | |
|   //argc  é un intero che specifica quanti parametri vengono passati al programma dalla linea di comando
 | |
|   const int args = argc();
 | |
|   
 | |
|   const int narg = check ? 3 : 2;
 | |
|   
 | |
|   //argv  é un array di null-terminated strings
 | |
|   if (args <= narg)
 | |
|     return false;                                     
 | |
| 
 | |
| 	const TFixed_string arg = argv(narg);
 | |
|   if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I'))
 | |
|     return false;
 | |
|     
 | |
|   _ini_name = arg.mid(2);
 | |
|   if (_ini_name.blank() && args > 3)  
 | |
|     _ini_name = argv(3);
 | |
|     
 | |
|   //controlla che il file su cui deve scrivere ci sia; se non c'é dá una segnalazione di errore
 | |
|   if (!_ini_name.exist())
 | |
|     return false;
 | |
|   
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| //CHECK_DOC: scorro il file ini e aggiungo alla tabella dei listini le righe mancanti
 | |
| void TAggiungi_listini_haba_app::check_doc()
 | |
| {              
 | |
|   TConfig ini(_ini_name, "33");
 | |
|   TString4 para;  para.format("%d", LF_DOC);
 | |
| 	const int anno = ini.get_int(DOC_ANNO, para);
 | |
|   TString4 mese; mese.format("%02d", TDate(ini.get(DOC_DATADOC)).month());
 | |
| 
 | |
|   TTable listini("LGM");
 | |
| 
 | |
|   //scorro le righe documento, saltando quelle che non sono articoli,
 | |
|   //e fermandomi quando la set_paragraph fallisce dal momento che non so a priori
 | |
|   //quante sono le righe del documento
 | |
|   for(int i = 1; ; i++)
 | |
|   {
 | |
|     TString4 riga; riga.format("%d,%d", LF_RIGHEDOC, i);
 | |
|     
 | |
|     if(!ini.set_paragraph(riga))
 | |
|       break;
 | |
| 
 | |
| 		if(ini.get(RDOC_TIPORIGA) != "A1")
 | |
| 			continue;
 | |
| 
 | |
|     if(ini.get(RDOC_CODARTMAG).empty())
 | |
|       continue;
 | |
| 
 | |
|     const TString& codart  = ini.get(RDOC_CODART);
 | |
| 
 | |
| 		//devo prendere il prezzo al Kg (salvato in USER9, campo virtuale) e non il prezzo della riga
 | |
| 		const TString& r1 = ini.get(ini.get(RDOC_RG1));
 | |
| 		const int  inizio = r1.find("USER9=");
 | |
| 		const int fine = r1.find("\\n", inizio);
 | |
| 		TToken_string tmp(r1.sub(inizio, fine), '=');
 | |
|     const real importo(tmp.get(1));
 | |
| 
 | |
|     real spessore(ini.get(RDOC_LIVELLO));
 | |
| 		spessore.ceil();
 | |
| 
 | |
|     //il gruppo va letto dall'anagrafica magazzino
 | |
|     const TString16 gruppo = cache().get(LF_ANAMAG, codart, ANAMAG_GRMERC);
 | |
| 
 | |
|     TString80 codtab;
 | |
|     codtab << gruppo << mese << spessore;
 | |
| 
 | |
|     listini.put("CODTAB", codtab);
 | |
|     //se fallisce la read, allora aggiungo la riga
 | |
|     if(listini.read() != NOERR)
 | |
|     {
 | |
|       listini.zero();
 | |
|       listini.put("CODTAB", codtab);
 | |
|       listini.put("R0",     importo);
 | |
|       listini.write();
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TAggiungi_listini_haba_app::main_loop() //definizione della member function main_loop, della classe TAggiungi_listini_haba_app
 | |
| {
 | |
|  	TString sw(argv(2)); sw.upper(); 
 | |
|  	const bool chk_doc = sw == "-V";
 | |
| 
 | |
|   open_files(LF_TAB, LF_DOC, LF_RIGHEDOC, 0);
 | |
| 
 | |
|   //mostra un messaggio di errore se non riesce ad aprire  il file richiesto; nota la conversione dei tipi che
 | |
|   //é da eseguire quando devo passare una TString ad un %s
 | |
|   if(!load_ini(chk_doc))
 | |
|   {
 | |
|     error_box(TR("Impossibile aprire il file '%s'"), (const char*)_ini_name);
 | |
|     return;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
| 	  check_doc();
 | |
|     message_box(TR("Importazione listini completata"));
 | |
|   }
 | |
| }
 | |
| 
 | |
| //////  Esecuzione del programma  ///////////
 | |
| 
 | |
| int pd6411200(int argc, char* argv[])
 | |
| {
 | |
|   TAggiungi_listini_haba_app app;
 | |
|   app.run(argc,argv,"Listini Haba");
 | |
|   return 0;
 | |
| }
 |