Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione AGA patch 218 sul main trunk git-svn-id: svn://10.65.10.50/trunk@10087 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			317 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <execp.h>
 | |
| #include <relation.h>
 | |
| #include <tabutil.h>
 | |
| 
 | |
| #include "baeur.h"
 | |
| #include "baeur40.h"
 | |
| #include "../ve/velib.h"
 | |
| 
 | |
| #include <doc.h>
 | |
| #include <rdoc.h>
 | |
| 
 | |
| class TEuro40_mask;
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main app
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEuro04_app : public TEuro_app
 | |
| {             
 | |
| protected:
 | |
|   virtual bool create();
 | |
|   virtual void main_loop();
 | |
|   void  copy_docs(TEuro40_mask & mask);
 | |
| 
 | |
| public:
 | |
| };
 | |
| 
 | |
| inline TEuro04_app& app() { return (TEuro04_app&)main_app(); }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main mask
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEuro40_mask : public TAutomask
 | |
| { 
 | |
| public:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
|   TEuro40_mask() : TAutomask("baeur40") { }
 | |
|   void load_mask();
 | |
| };
 | |
| 
 | |
| bool TEuro40_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void TEuro40_mask::load_mask()
 | |
| {
 | |
|   TTable num("%NUM");
 | |
|   TSheet_field & s = (TSheet_field &) field(F40_DOCSHEET);
 | |
|                             
 | |
|   for (num.first(); num.good(); num.next())
 | |
|   {
 | |
|     TToken_string & row = s.row(-1);
 | |
|     row.add("");
 | |
|     row.add("");
 | |
|     row.add(num.get("CODTAB"));
 | |
|     row.add("");
 | |
|     row.add("");   
 | |
|     row.add("");
 | |
|     row.add(num.get("S0")); 
 | |
|     s.check_row(s.items() - 1);
 | |
|   }
 | |
| 
 | |
|   TSheet_field & t = (TSheet_field &) field(F40_TIPISHEET);
 | |
|   TTable tip("%TRI");
 | |
|                             
 | |
|   for (tip.first(); tip.good(); tip.next())
 | |
|   {               
 | |
|     const TString16 tipo(tip.get("CODTAB"));
 | |
|     if (*tipo >= 'A')
 | |
|     {
 | |
|       TToken_string & row = t.row(-1);
 | |
|     
 | |
|       row.add("");
 | |
|       row.add(tipo);
 | |
|       row.add(tip.get("S0"));
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main 
 | |
| ///////////////////////////////////////////////////////////
 | |
|  
 | |
| class TNum_data : public TObject
 | |
| {     
 | |
|   public:
 | |
|   int _anno;
 | |
|   int _da_stato;
 | |
|   int _a_stato;
 | |
|   bool _repeat;
 | |
|   TAssoc_array _extra_tipi_riga;
 | |
| } ;
 | |
| 
 | |
| bool TEuro04_app::create()
 | |
| {
 | |
|   goto_lire();
 | |
| 
 | |
|   if (!set_firm())
 | |
|     return FALSE;
 | |
|   const long ditta = get_firm();  
 | |
|   if (!dbf_exists(LF_DOC, TRUE))
 | |
|     return error_box("Non esistono gli archivi della ditta %ld nell'area in Euro", ditta);
 | |
| 
 | |
|   TEuro_app::create();
 | |
|   open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, 
 | |
|              LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON,
 | |
|              LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0);
 | |
|              
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| static bool doc_handler(TRectype& rec, void* jolly)
 | |
| {                                                              
 | |
|   TAssoc_array * num = (TAssoc_array *) jolly;
 | |
|   TNum_data * data = (TNum_data *) num->objptr(rec.get(DOC_CODNUM));
 | |
|            
 | |
|   if (data != NULL)
 | |
|   {
 | |
|     if (data->_anno <= rec.get_int(DOC_ANNO))
 | |
|     {             
 | |
|       const int stato = rec.get_int(DOC_STATO);
 | |
|       if (data->_da_stato <= stato && (data->_a_stato == 0 || stato <= data->_a_stato)) 
 | |
|       {                            
 | |
|         const TString tipodoc(rec.get(DOC_TIPODOC));
 | |
|         TTipo_documento t(cache().get("%TIP", tipodoc));
 | |
|         
 | |
|         if ((!t.is_ordine() || riporta_ordinato()) && !data->_repeat)
 | |
|           rec.put(DOC_STATO, (char) t.stato_bloccato());
 | |
| 
 | |
|         const TString16 val = rec.get("CODVAL");
 | |
|         
 | |
|         if (is_firm_value(val))
 | |
|         {
 | |
|           rec.zero(DOC_CODVAL);
 | |
|           rec.zero(DOC_CAMBIO);
 | |
|           rec.put(DOC_CONTROEURO, "X");
 | |
|           real imp = rec.get_real(DOC_IMPPAGATO) / EURO;
 | |
|           
 | |
|           imp.round(2);
 | |
|           rec.put(DOC_IMPPAGATO, imp);
 | |
|         }
 | |
|         else
 | |
|           if (is_euro_value(val))
 | |
|           {
 | |
|             rec.zero(DOC_CODVAL);
 | |
|             rec.zero(DOC_CAMBIO);
 | |
|             rec.zero(DOC_CONTROEURO);
 | |
|           }
 | |
|           else
 | |
|             if (!rec.get_bool(DOC_CONTROEURO))
 | |
|             {
 | |
|               real contro_change = EURO / rec.get_real(DOC_CAMBIO);
 | |
|                                                                         
 | |
|               contro_change.round(6);
 | |
|               rec.put(DOC_CAMBIO, contro_change);
 | |
|               rec.put(DOC_CONTROEURO, "X");
 | |
|             }
 | |
|                             
 | |
|         const TString16 key(rec.get(DOC_MOVMAG));
 | |
|         if (key.not_empty())
 | |
|         {
 | |
|           const TRectype & mov =  cache().get(LF_MOVMAG, key);
 | |
|           if (mov.empty())
 | |
|             rec.zero(DOC_MOVMAG);  
 | |
|         }
 | |
|         return TRUE;                                                              
 | |
|         
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return FALSE;  
 | |
| }
 | |
| 
 | |
| static bool rdoc_handler(TRectype& rec, void* jolly)
 | |
| {           
 | |
|   TString key;
 | |
|   key << rec.get(RDOC_PROVV);
 | |
|   key << "|" << rec.get(RDOC_ANNO);
 | |
|   key << "|" << rec.get(RDOC_CODNUM);
 | |
|   key << "|" << rec.get(RDOC_NDOC);
 | |
|   TRectype doc((TRectype &) cache().get(LF_DOC, key));
 | |
|   bool ok = doc_handler(doc, jolly);                     
 | |
|   
 | |
|   if (doc.get(DOC_MOVMAG).empty())
 | |
|     rec.zero(RDOC_MOVMAG);
 | |
|   if (doc.get(DOC_CODVAL).empty() && doc.get_bool(DOC_CONTROEURO))
 | |
|   {  
 | |
|     const TString16 tipo(rec.get(RDOC_TIPORIGA));
 | |
|     
 | |
|     
 | |
|     if (tipo != "04" && tipo != "05" && tipo != "08")
 | |
|     {
 | |
|       real prezzo = rec.get_real(RDOC_PREZZO) / EURO;
 | |
|       bool is_prezzo = tipo != "07";
 | |
|       bool convert = TRUE;
 | |
|       const int tipoint = atoi(tipo);
 | |
|       if (*tipo >= 'A')
 | |
|       {                               
 | |
|         TAssoc_array * num = (TAssoc_array *) jolly;
 | |
|         TNum_data * data = (TNum_data *) num->objptr(rec.get(RDOC_CODNUM));
 | |
|         TString * tpc = (TString *)data->_extra_tipi_riga.objptr(tipo);
 | |
|         if (tpc != NULL)
 | |
|         {               
 | |
|           if (*tpc == "N")
 | |
|             convert = FALSE;
 | |
|           else
 | |
|             is_prezzo = *tpc == " ";
 | |
|         }
 | |
|       }
 | |
|       else
 | |
|         if (tipo == "02" || tipo == "03" || tipo == "06")
 | |
|         {
 | |
|           TString cod(rec.get(RDOC_CODART));
 | |
|           TSpesa_prest s(cod, tipo == "06" ? 'P' : 'S');  
 | |
|           is_prezzo = s.tipo() == 'Q';
 | |
|           convert = s.tipo() != 'P';
 | |
|         }   
 | |
|       if (convert)
 | |
|       {
 | |
|         prezzo.round(TCurrency::get_euro_dec(is_prezzo));
 | |
|         rec.put(RDOC_PREZZO, prezzo);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     real impfisso = rec.get_real(RDOC_IMPFISSO) / EURO;
 | |
| 
 | |
|     impfisso.round(TCurrency::get_euro_dec());
 | |
|     rec.put(RDOC_IMPFISSO, impfisso);
 | |
|   }
 | |
|   
 | |
|   return ok;            
 | |
| }
 | |
| 
 | |
| void TEuro04_app::copy_docs(TEuro40_mask & mask)
 | |
| {
 | |
|   TSheet_field & t = (TSheet_field &) mask.field(F40_TIPISHEET);
 | |
|   int items = t.items();
 | |
|   TAssoc_array extra_tipi;
 | |
|   
 | |
|   for (int i = 0; i < items; i++)
 | |
|   { 
 | |
|     TToken_string & row = t.row(i);
 | |
|     TString val(row.get(0));
 | |
|     extra_tipi.add(row.get(), val);
 | |
|   }
 | |
|   
 | |
|   TSheet_field & s = (TSheet_field &) mask.field(F40_DOCSHEET);
 | |
|   items = s.items();
 | |
|   TAssoc_array docs2convert;
 | |
|                             
 | |
|   for (i = 0; i < items; i++)
 | |
|   {
 | |
|     TToken_string & row = s.row(i);
 | |
|     TString selected(row.get(0));
 | |
|     
 | |
|     if (selected == "X")
 | |
|     {
 | |
|       TNum_data * d = new TNum_data;
 | |
|       
 | |
|       d->_anno = row.get_int();      
 | |
|       TString16 codnum(row.get());
 | |
|       d->_da_stato = row.get_int();      
 | |
|       d->_a_stato = row.get_int();      
 | |
|       d->_repeat =  *row.get() == 'X';      
 | |
|       d->_extra_tipi_riga = extra_tipi;
 | |
|       docs2convert.add(codnum, d);
 | |
|     } 
 | |
|   }
 | |
|   convert_file(LF_DOC, NULL, NULL, NULL, doc_handler, &docs2convert);  
 | |
|   convert_file(LF_RIGHEDOC, NULL, NULL, NULL, rdoc_handler, &docs2convert);  
 | |
| }
 | |
| 
 | |
| void TEuro04_app::main_loop()
 | |
| {   
 | |
|   TEuro40_mask msk;
 | |
|   TDate apertura(1,1,2002);
 | |
|   TDate chiusura(31,12,2001);
 | |
|   const long firm = get_firm();
 | |
|   TFilename dati, datie;
 | |
|   get_aree_dati(dati, datie);
 | |
|   msk.set(F40_DATI, dati);
 | |
|   msk.set(F40_DATIE, datie);
 | |
|   
 | |
|   TString8 ditta; 
 | |
|   ditta.format("%05ldA", firm);
 | |
|   
 | |
|   TFilename inie = datie;
 | |
|   inie.add(ditta);
 | |
|   inie.add("prassid.ini");
 | |
|   
 | |
|   bool adotta = FALSE, inizio = FALSE;
 | |
|   if (inie.exist())
 | |
|     adotta = data_adozione_euro(firm, apertura, inizio);
 | |
|   
 | |
|   msk.load_mask();
 | |
|   if (msk.run() == K_ENTER)
 | |
|   {
 | |
|     copy_docs(msk);
 | |
|     TExternal_app app("baeur -6 D");
 | |
|     
 | |
|     app.run();
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| int baeur04(int argc, char* argv[])
 | |
| {  
 | |
|   TEuro04_app ma;
 | |
|   ma.run(argc, argv, "Conversione documenti");
 | |
|   
 | |
|   return 0;
 | |
| }
 |