Files correlati : Ricompilazione Demo : [ ] Commento :eliminato quell'aborto di ve7; trasformato in ps0077 tanto per non perdere i programmi git-svn-id: svn://10.65.10.50/trunk@18345 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			451 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			451 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <recarray.h>
 | |
| 
 | |
| #include <../mg/anamag.h>
 | |
| #include <../mg/umart.h>
 | |
| 
 | |
| #include <clifo.h>
 | |
| #include <comuni.h>
 | |
| 
 | |
| #include "ps0077700.h"
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TGalileo_clifo
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| bool select_clifo(const TRectype & rec, TObject * myself)
 | |
| {
 | |
| 	TGalileo_clifo * c = (TGalileo_clifo *) myself;
 | |
| 	const TString80 key = rec.build_key();
 | |
| 	return c->keys().objptr(key) != NULL; 
 | |
| }
 | |
| 
 | |
| int TGalileo_clifo::cancella_clifo(TLocalisamfile& clifo) const
 | |
| {     
 | |
| 	return NOERR;
 | |
| }
 | |
| 
 | |
| long TGalileo_clifo::get_next_key(const char tipocf) const
 | |
| {
 | |
|   TLocalisamfile clifo(LF_CLIFO);
 | |
|   long codcf = 1L;
 | |
|   if (!clifo.empty())
 | |
|   {
 | |
|     if (tipocf == 'C')
 | |
|     {
 | |
|       clifo.put(CLI_TIPOCF, 'F');
 | |
|       clifo.read(_isgteq);
 | |
|       if (clifo.good())
 | |
|         clifo.prev();
 | |
|       clifo.setstatus(NOERR);
 | |
|     }
 | |
|     else 
 | |
|       clifo.last();
 | |
|     if (clifo.good())
 | |
|     {
 | |
|       const char tipo = clifo.get(CLI_TIPOCF)[0]; 
 | |
|       if (tipocf == tipo)
 | |
|         codcf += clifo.get_long(CLI_CODCF);
 | |
|     }
 | |
|   }                 
 | |
|   return codcf;
 | |
| }
 | |
| 
 | |
| long TGalileo_clifo::get_codcf(const char tipocf, const char* ricalt) const
 | |
| {
 | |
|   TLocalisamfile clifo(LF_CLIFO);
 | |
|   long codcf = -1;
 | |
| 	clifo.setkey(6);
 | |
| 	clifo.put(CLI_TIPOCF, tipocf);
 | |
| 	clifo.put(CLI_RICALT, ricalt);
 | |
| 	if (clifo.read() == NOERR) 
 | |
| 		codcf = clifo.get_long(CLI_CODCF);
 | |
|   return codcf;
 | |
| }
 | |
| 
 | |
| bool TGalileo_clifo::dump()
 | |
| {
 | |
|   if (!_path.exist())
 | |
|     return true;
 | |
| 
 | |
| 	TConfig& ini = config();
 | |
| 	TString_array lista_clifo;
 | |
| 	ini.list_variables(lista_clifo, true, "CLIFO", true);
 | |
| 	TToken_string lista_dump;
 | |
| 	lista_dump.add(CLI_TIPOCF);
 | |
| 	lista_dump.add(CLI_CODCF);
 | |
| 	lista_dump.add(CLI_COMCF);
 | |
| 	TString16 campo_dest, campo_orig;
 | |
| 	FOR_EACH_ARRAY_ROW(lista_clifo,i,row)
 | |
| 	{
 | |
| 		row->get(0, campo_dest); 
 | |
| 		row->get(1, campo_orig);
 | |
| 		if (campo_orig.full())
 | |
| 			lista_dump.add(campo_dest);
 | |
| 	}
 | |
| 	TFilename path = _path; path.add("clifo.txt");
 | |
| 	TSystemisamfile clifo(LF_CLIFO);
 | |
| 
 | |
|   int err = clifo.dump(path, lista_dump, 1, '|', '\0', '\n', true, false, NULL, select_clifo, this);
 | |
|   if (err == NOERR)
 | |
|     log("Errore di scrittura del file clifo.txt", 0);
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| bool TGalileo_clifo::trasferisci()
 | |
| {
 | |
|   TString query = 
 | |
| 		"SELECT CLFOCP, CONTCA, DSCOCP, DSULCP, INDICA, LOCACA, PROVCA, CAPOCA, "
 | |
| 		"NAZICA, CISOCA, PIVACA, CDFICA, NTELCA, NFAXCA \n"
 | |
| 		"FROM CGANA01J \n";
 | |
| 	if (!_data.empty())
 | |
| 	{
 | |
| 		query << "WHERE DTMNCA >= ";
 | |
|   	query << _data.date2ansi();
 | |
| 	}
 | |
| 
 | |
|   TRecordset& recset = create_recordset(query);
 | |
| 
 | |
| 	TString str;
 | |
| 
 | |
| 	TConfig& ini = config();
 | |
| 	TString_array lista_clifo;
 | |
| 	ini.list_variables(lista_clifo, true, "CLIFO", true);
 | |
| 	TIsamfile clifo(LF_CLIFO);
 | |
| 	TRectype& rec_clifo = clifo.curr();
 | |
| 
 | |
| 	_keys.destroy();
 | |
| 	clifo.open_ex(_excllock);
 | |
| 	TRecord_cache cache_comuni(LF_COMUNI, 2);
 | |
|   TGalileo_iterator pi(this);
 | |
| 
 | |
| 	while (++pi)
 | |
|   {
 | |
| 		const TString& contca = get_str("CONTCA");
 | |
| 		const char tipocf = get_str("CLFOCP")[0];
 | |
| 		long codcf = get_codcf(tipocf, contca); // mi restiuisce  il codice del clinete  se esiste oppure -1 se da aggiungere
 | |
| 
 | |
|     bool needs_creation = codcf <= 0;
 | |
| 	  bool good = true;
 | |
| 
 | |
|     if (!needs_creation)
 | |
| 		{
 | |
| 			// il cliente/fornitore va aggiornato
 | |
|       rec_clifo.zero();
 | |
| 			rec_clifo.put(CLI_TIPOCF, tipocf);
 | |
| 			rec_clifo.put(CLI_CODCF, codcf);
 | |
| 			const TString16 key(rec_clifo.build_key(1));
 | |
| 
 | |
| 			_keys.add(key, key);
 | |
| 			good = clifo.read() == NOERR;
 | |
| 			if (!good)
 | |
|         needs_creation = true;
 | |
| 		}
 | |
|     
 | |
| 		if (needs_creation)
 | |
| 		{
 | |
| 			// il cliente/fornitore va inserito in campo 
 | |
|       if (codcf <= 0)
 | |
| 			  codcf = get_next_key(tipocf);
 | |
| 			rec_clifo.zero();
 | |
| 			rec_clifo.put(CLI_TIPOCF, tipocf);
 | |
| 			rec_clifo.put(CLI_CODCF, codcf);
 | |
| 			good &= test_write(clifo);
 | |
| 		}
 | |
| 		
 | |
| 		if (good)
 | |
| 		{
 | |
| 			// aggiormento comune
 | |
| 			TString80 dencom = get_str("LOCACA");
 | |
| 			dencom.trim(); dencom.upper();
 | |
| 			const TRectype& reccom = cache_comuni.get(dencom);
 | |
| 			if (dencom == reccom.get(COM_DENCOM))
 | |
| 				rec_clifo.put(CLI_COMCF, reccom.get(COM_COM));
 | |
| 			else
 | |
| 			{
 | |
| 				rec_clifo.zero(CLI_COMCF);
 | |
| 				rec_clifo.put(CLI_LOCCF, dencom);
 | |
| 
 | |
| 				log("");
 | |
| 				str.format(FR("Cliente/Fornitore %c %ld: comune non trovato %s"), tipocf, codcf, (const char*)dencom);
 | |
| 				log(str);
 | |
| 			}
 | |
| 			aggiorna_record(clifo, lista_clifo);
 | |
| 		}
 | |
| 	}	
 | |
| 	clifo.close();
 | |
|   return write_enabled();
 | |
| }
 | |
| 
 | |
| bool TGalileo_clifo::aggiorna_record(TIsamfile& file, const TString_array& lista_campi)
 | |
| {
 | |
| 	TRectype& rec = file.curr();	
 | |
| 	TString campo_dest, campo_orig, valore, str;
 | |
| 	FOR_EACH_ARRAY_ROW(lista_campi,i,row)
 | |
| 	{
 | |
| 		row->get(0, campo_dest); 
 | |
| 		row->get(1, campo_orig);
 | |
| 		if (campo_orig.full())
 | |
| 		{
 | |
| 			if (campo_orig[0] == '_')
 | |
| 			{
 | |
| 				TToken_string elabora(campo_orig.mid(1),',');
 | |
| 				const TString& str = elabora.get();
 | |
| 				if (str == "TAB") // formato _TAB, <tabella da leggere>,<valore CODTAB>, <campo da leggere>
 | |
| 				{
 | |
| 					const TString4 tab = elabora.get(); // tabella da leggere
 | |
| 					const TString80 campo = elabora.get();
 | |
| 					const TString16 codtab = get_str(campo);
 | |
| 					const TString80 campotab = elabora.get();
 | |
| 					valore = cache().get(tab, codtab, campotab);
 | |
| 				}
 | |
| 				else if (str == "FISSO") 
 | |
| 					valore = elabora.get(); // valore fisso indicato in configurazione
 | |
|       }
 | |
|       else
 | |
| 			  valore = get_str(campo_orig);
 | |
| 			rec.put(campo_dest, valore);
 | |
| 		}
 | |
| 	}
 | |
| 	return test_rewrite(file);
 | |
| }
 | |
| 
 | |
| TGalileo_clifo::TGalileo_clifo()
 | |
| {
 | |
| }
 | |
| 
 | |
| TGalileo_clifo::~TGalileo_clifo()
 | |
| {
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TGalileo_articoli
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| bool select_umart(const TRectype & rec, TObject * myself)
 | |
| {
 | |
| 	TGalileo_articoli * c = (TGalileo_articoli *) myself;
 | |
| 	const TString key(rec.build_key(1));
 | |
| 	return c->keys_umart().objptr(key) != NULL; 
 | |
| }
 | |
| 
 | |
| bool select_articoli(const TRectype & rec, TObject * myself)
 | |
| {
 | |
| 	TGalileo_articoli * c = (TGalileo_articoli *) myself;
 | |
| 	const TString key(rec.build_key(1));
 | |
| 	return c->keys_articoli().objptr(key) != NULL; 
 | |
| }
 | |
| 
 | |
| int TGalileo_articoli::cancella_articolo(TLocalisamfile& anamag) const
 | |
| {     
 | |
| 	return NOERR;
 | |
| }
 | |
| 
 | |
| bool TGalileo_articoli::dump()
 | |
| {
 | |
|   if (!_path.exist())
 | |
|     return true;
 | |
| 
 | |
| 	TConfig& ini = config();
 | |
| 	TString_array lista_anamag;
 | |
| 	ini.list_variables(lista_anamag, true, "ANAMAG", true);
 | |
| 	TToken_string lista_dump;
 | |
| 	lista_dump.add(ANAMAG_CODART);
 | |
| 	TString16 campo_dest, campo_orig;
 | |
| 	FOR_EACH_ARRAY_ROW(lista_anamag,i,row)
 | |
| 	{
 | |
| 		row->get(0, campo_dest); 
 | |
| 		row->get(1, campo_orig);
 | |
| 		if (campo_orig.full())
 | |
| 			lista_dump.add(campo_dest);
 | |
| 	}
 | |
| 	lista_dump.add(ANAMAG_ULTCOS1);
 | |
| 
 | |
| 	TString_array lista_umart;
 | |
| 	TToken_string lista_dump_umart;
 | |
| 
 | |
| 	ini.list_variables(lista_umart, true, "UMART", true);
 | |
| 	FOR_EACH_ARRAY_ROW(lista_umart,k,rowu)
 | |
| 	{
 | |
| 		rowu->get(0, campo_dest); 
 | |
| 		lista_dump_umart.add(campo_dest);
 | |
| 	}
 | |
| 	TSystemisamfile anamag(LF_ANAMAG);
 | |
| 	TSystemisamfile umart(LF_UMART);
 | |
| 	TFilename path = _path;
 | |
| 	path.add("umart.txt");
 | |
| 	int err = umart.dump(path, lista_dump_umart, 1, '|', '\0', '\n', true, false, 
 | |
|                        NULL, select_umart, this);
 | |
|   if (err != NOERR)
 | |
|     log("Errore di scrittura umart.txt", 2);
 | |
| 	path = _path;	path.add("anamag.txt");
 | |
| 	err = anamag.dump(path, lista_dump, 1, '|', '\0', '\n', true, false, 
 | |
|                     NULL, select_articoli, this);
 | |
|   if (err != NOERR)
 | |
|     log("Errore di scrittura anamag.txt", 0);
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| bool TGalileo_articoli::trasferisci()
 | |
| {
 | |
|   TString query = 
 | |
| 		"SELECT RICOD, RDES1, RDES2, RDES3, RSUMS, RITIP, RISIG \n"
 | |
| 		"FROM BRISO00F, BTABE00F \n"
 | |
| 		"WHERE (SUBSTR(BTABE00F.TBDAT , 9 , 1)=RITIP) AND (BTABE00F.TBTIP='COD') AND (BTABE00F.TBELE='RIS')";
 | |
| 	if (!_data.empty())
 | |
| 	{
 | |
|  		query << " AND (RIDTX >= ";
 | |
| 		query << _data.date2ansi() << ")";
 | |
| 	}
 | |
| 
 | |
|   TRecordset& recset = create_recordset(query);
 | |
| 
 | |
| 	TString str;
 | |
| 
 | |
| 	TConfig& ini = config();
 | |
| 	TString_array lista_anamag, lista_umart;
 | |
| 	ini.list_variables(lista_anamag, true, "ANAMAG", true);
 | |
| 	ini.list_variables(lista_umart, true, "UMART", true);
 | |
| 	TIsamfile anamag(LF_ANAMAG);
 | |
| 	TIsamfile umart(LF_UMART);
 | |
| 	
 | |
| 	anamag.open_ex(_excllock);
 | |
| 	umart.open_ex(_excllock);
 | |
| 	
 | |
| 	TRectype& rec_anamag = anamag.curr();
 | |
| 	TRectype& rec_umart = umart.curr();
 | |
| 	_keys_articoli.destroy();
 | |
| 	_keys_umart.destroy();
 | |
| 
 | |
|   TGalileo_iterator pi(this);
 | |
|   while (++pi)
 | |
|   {	
 | |
| 		const TString& codart = get_str("RICOD");
 | |
|     rec_anamag.zero();
 | |
| 		rec_anamag.put(ANAMAG_CODART, codart);
 | |
| 
 | |
| 		const TString80 key(rec_anamag.build_key(1));
 | |
| 
 | |
| 		_keys_articoli.add(key, key);
 | |
| 
 | |
| 		bool good = anamag.read() == NOERR;
 | |
| 
 | |
| 		if (!good)
 | |
| 		{
 | |
| 			rec_anamag.zero();
 | |
| 			rec_anamag.put(ANAMAG_CODART, codart);
 | |
| 			good = test_write(anamag);
 | |
| 		}
 | |
| 		if (good)
 | |
| 		{
 | |
| 			aggiorna_record(anamag, lista_anamag);
 | |
| 	    rec_umart.zero();
 | |
| 			rec_umart.put(UMART_CODART, codart);
 | |
| 			rec_umart.put(UMART_NRIGA, 1);
 | |
| 
 | |
| 			const TString80 key_umart(rec_umart.build_key(1));
 | |
| 		
 | |
| 			_keys_umart.add(key_umart, key_umart);
 | |
| 			bool good = umart.read() == NOERR;
 | |
| 			if (!good)
 | |
| 			{
 | |
| 				rec_umart.zero();
 | |
| 				rec_umart.put(UMART_CODART, codart);
 | |
| 				rec_umart.put(UMART_NRIGA, 1);
 | |
| 				good = (umart.write() == NOERR);
 | |
| 			}
 | |
| 			if (good)
 | |
| 			{
 | |
| 				rec_umart.put(UMART_UM, get_str("RSUMS"));
 | |
| 				rec_umart.put(UMART_FC, 1);
 | |
| 				umart.rewrite();
 | |
| 			}
 | |
| 		}
 | |
| 	}	
 | |
| 	anamag.close();
 | |
| 	umart.close();
 | |
|   return write_enabled();
 | |
| }
 | |
| 
 | |
| bool TGalileo_articoli::trasferisci_costi(const TString & ditta, const TString & cms, const TString & can)
 | |
| {
 | |
|   TString query = 
 | |
| 	"SELECT M2RIS, M2CMD FROM GMRIS00F\n"
 | |
| 	"WHERE (M2AZI='";
 | |
| 	query << ditta <<"') AND (M2COM='" << cms <<"') AND (M2CAN='" << can << "')";
 | |
|   TRecordset& recset = create_recordset(query);
 | |
| 	TIsamfile anamag(LF_ANAMAG);
 | |
|  	TRectype& rec_anamag = anamag.curr();
 | |
| 	TGalileo_iterator pi(this);
 | |
| 	TString80 codart;
 | |
| 	anamag.open_ex(_excllock);
 | |
| 	while (++pi)
 | |
|   {	
 | |
| 		codart = get_str("M2RIS");
 | |
| 		rec_anamag.zero();
 | |
| 		rec_anamag.put(ANAMAG_CODART, codart);
 | |
| 		bool good = anamag.read() == NOERR;
 | |
| 		if (good)
 | |
| 		{
 | |
| 			anamag.put(ANAMAG_ULTCOS1, get_str("M2CMD"));
 | |
| 			test_rewrite(anamag);
 | |
| 		}
 | |
| 	}
 | |
| 	anamag.close();
 | |
|   return write_enabled();
 | |
| }
 | |
| 
 | |
| bool TGalileo_articoli::aggiorna_record(TIsamfile& file, const TString_array& lista_campi)
 | |
| {
 | |
| 	TRectype& rec = file.curr();	
 | |
| 	TString campo_dest, campo_orig, valore, str;
 | |
| 
 | |
| 	FOR_EACH_ARRAY_ROW(lista_campi,i,row)
 | |
| 	{
 | |
| 		row->get(0, campo_dest); 
 | |
| 		row->get(1, campo_orig);
 | |
| 		if (campo_orig.full())
 | |
| 		{
 | |
| 			if (campo_orig[0] == '_')
 | |
| 			{
 | |
| 				TToken_string elabora(campo_orig.mid(1),',');
 | |
| 				const TString& str = elabora.get();
 | |
| 				if (str == "TAB") // formato _TAB, <tabella da leggere>,<valore CODTAB>, <campo da leggere>
 | |
| 				{
 | |
| 					const TString4 tab = elabora.get(); // tabella da leggere
 | |
| 					const TString80 campo = elabora.get();
 | |
| 					const TString16 codtab = get_str(campo);
 | |
| 					const TString80 campotab = elabora.get();
 | |
| 					valore = cache().get(tab, codtab, campotab);
 | |
| 				}
 | |
| 				else if (str == "FISSO") 
 | |
| 					valore = elabora.get(); // valore fisso indicato in configurazione
 | |
|       } else
 | |
|       if (campo_orig[0] == '"' || campo_orig[0] == '\'')
 | |
|       {
 | |
|         valore = campo_orig;
 | |
|         valore.ltrim(1);
 | |
|         valore.rtrim(1); 
 | |
|       }
 | |
|       else
 | |
| 			  valore = get_str(campo_orig);
 | |
| 			rec.put(campo_dest, valore);
 | |
| 		}
 | |
| 	}
 | |
| 	return test_rewrite(file);
 | |
| }
 | |
| 
 | |
| TGalileo_articoli::TGalileo_articoli()
 | |
| {
 | |
| 	TConfig c(CONFIG_DITTA);
 | |
| 
 | |
| 	_ditta = c.get_long("GalDitta");
 | |
| 	_cms = c.get("GalCommessa");
 | |
| 	_can = c.get("GalCantiere");
 | |
| }
 | |
| 
 | |
| TGalileo_articoli::~TGalileo_articoli()
 | |
| {
 | |
| }
 | |
| 
 |