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;
 | 
						|
}
 |