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
		
			
				
	
	
		
			231 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <execp.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <relation.h>
 | 
						|
 | 
						|
#include "baeur.h"
 | 
						|
#include "../mg/mglib.h"
 | 
						|
#include "../cg/cglib01.h"
 | 
						|
#include "../ve/velib.h"
 | 
						|
 | 
						|
#include <doc.h>
 | 
						|
#include <rdoc.h>
 | 
						|
 | 
						|
class TArticolo_euro : public TArticolo_giacenza
 | 
						|
{          
 | 
						|
public:                                                       
 | 
						|
  bool adjust_storico(const int anno);
 | 
						|
 | 
						|
  TArticolo_euro(const char* codice = NULL) : TArticolo_giacenza(codice) {}
 | 
						|
  TArticolo_euro(const TRectype& rec) : TArticolo_giacenza(rec) {}
 | 
						|
  virtual ~TArticolo_euro() {}
 | 
						|
};
 | 
						|
  
 | 
						|
bool TArticolo_euro::adjust_storico(const int anno)
 | 
						|
{
 | 
						|
  bool updated = FALSE;             
 | 
						|
  TAssoc_array values;              
 | 
						|
  TString16 annoes; annoes << anno;
 | 
						|
  TRecord_array & s = storico(annoes);
 | 
						|
  const int sto_items = s.rows();
 | 
						|
  for (int i = 1; i <= sto_items; i++)
 | 
						|
  {          
 | 
						|
    TRectype & rec = s[i];
 | 
						|
    TString16 codmag(rec.get(STOMAG_CODMAG));
 | 
						|
    real val = rec.get_real(STOMAG_VALORE);
 | 
						|
    val *= rec.get_real(STOMAG_QUANT);
 | 
						|
    real * tot = (real *)values.objptr(codmag);
 | 
						|
    
 | 
						|
    if (tot == NULL)
 | 
						|
    {
 | 
						|
      tot = new real;
 | 
						|
      values.add(codmag, tot);
 | 
						|
    }    
 | 
						|
    *tot += val;
 | 
						|
  }
 | 
						|
 | 
						|
  TRecord_array& m = mag(annoes);
 | 
						|
  const int mag_items = m.rows();
 | 
						|
  for (i = 1; i <= mag_items; i++)
 | 
						|
  {
 | 
						|
    TRectype & rec = m[i];
 | 
						|
    TString16 codmag(rec.get(MAG_CODMAG));
 | 
						|
    const real val = rec.get_real(MAG_VALRIM);
 | 
						|
    real * tot = (real *)values.objptr(codmag);
 | 
						|
      
 | 
						|
    if (tot == NULL)
 | 
						|
    {
 | 
						|
      tot = new real;
 | 
						|
      values.add(codmag, tot);
 | 
						|
    }    
 | 
						|
    *tot -= val;
 | 
						|
  }        
 | 
						|
  
 | 
						|
  for (i = 1; i <= mag_items; i++)
 | 
						|
  {          
 | 
						|
    TRectype & rec = m[i];
 | 
						|
    TString16 codmag(rec.get(MAG_CODMAG));
 | 
						|
    real val = rec.get_real(MAG_VALRIM);
 | 
						|
    real * corr = (real *)values.objptr(codmag);
 | 
						|
    
 | 
						|
    if (corr != NULL && *corr != ZERO)
 | 
						|
    {
 | 
						|
      corr->round(TCurrency::get_firm_dec(FALSE));
 | 
						|
      val += *corr;                           
 | 
						|
      rec.put(MAG_VALRIM, val);            
 | 
						|
      updated = TRUE;
 | 
						|
      *corr = ZERO;
 | 
						|
    }    
 | 
						|
  }
 | 
						|
 | 
						|
  return updated;
 | 
						|
}   
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Main app
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TEuro06_app : public TEuro_app
 | 
						|
{ 
 | 
						|
protected:
 | 
						|
  virtual bool create();
 | 
						|
  virtual void main_loop();
 | 
						|
  void update_stomag();
 | 
						|
 | 
						|
public:
 | 
						|
};
 | 
						|
 | 
						|
inline TEuro06_app& app() { return (TEuro06_app&)main_app(); }
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Main 
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
bool TEuro06_app::create()
 | 
						|
{        
 | 
						|
  if (!dbf_exists(LF_ANAMAG) || !dbf_exists(LF_STOMAG) || !dbf_exists(LF_MOVMAG))
 | 
						|
    return FALSE;
 | 
						|
 | 
						|
  TEuro_app::create();
 | 
						|
  bool ok = goto_euro(get_firm());
 | 
						|
  open_files(LF_TAB, LF_TABCOM, LF_STOMAG, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, 0);
 | 
						|
  open_files(LF_SCONTI, LF_UMART, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, 0);
 | 
						|
  open_files(LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
void TEuro06_app::update_stomag()
 | 
						|
{                               
 | 
						|
  TEsercizi_contabili e;
 | 
						|
  
 | 
						|
  TRelation amag(LF_ANAMAG);
 | 
						|
  TCursor c(&amag);        
 | 
						|
  TArticolo_euro * a = new TArticolo_euro();
 | 
						|
  TString str;
 | 
						|
  str << "Aggiornamento storico di magazzino ...";
 | 
						|
 | 
						|
  amag.lfile().set_curr(a);
 | 
						|
  const long items = c.items();
 | 
						|
  TProgind pi(items, str, FALSE, TRUE);
 | 
						|
        
 | 
						|
  for (c = 0L; c.pos() < items; ++c)
 | 
						|
  {
 | 
						|
    pi.addstatus(1);
 | 
						|
    TArticolo_euro& curr_art = (TArticolo_euro &) c.curr();
 | 
						|
    for (int codes = e.first(); codes > 0; codes = e.next(codes))
 | 
						|
    {
 | 
						|
      if (curr_art.adjust_storico(codes))
 | 
						|
        curr_art.rewrite();
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TEuro06_app::main_loop()
 | 
						|
{   
 | 
						|
  TDate apertura(1,1,2002);
 | 
						|
  const long firm = get_firm();
 | 
						|
  TFilename dati, datie;
 | 
						|
  get_aree_dati(dati, 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);
 | 
						|
  TEsercizi_contabili esc;
 | 
						|
  TString16 command(argv(2));
 | 
						|
  
 | 
						|
  if (command == "A") 
 | 
						|
  {
 | 
						|
    update_stomag();
 | 
						|
    TExternal_app app("mg1 -3");
 | 
						|
    
 | 
						|
    app.run();
 | 
						|
  }
 | 
						|
  else
 | 
						|
    if (command == "S") 
 | 
						|
    {
 | 
						|
      const int annoes = esc.date2esc(apertura);
 | 
						|
      TString16 codes; codes << annoes;
 | 
						|
 | 
						|
      update_stomag();
 | 
						|
      rebuild_balances(codes); 
 | 
						|
    }
 | 
						|
    else
 | 
						|
      if (command == "D") 
 | 
						|
      { 
 | 
						|
        TRelation doc(LF_DOC);
 | 
						|
        TCursor c(&doc);        
 | 
						|
        TDocumento * d = new TDocumento();
 | 
						|
 | 
						|
        TString str;
 | 
						|
        str << "Riesamina " << doc.lfile().description() << " ...";
 | 
						|
  
 | 
						|
        doc.lfile().set_curr(d);
 | 
						|
        const long items = c.items();
 | 
						|
        TProgind pi(items, str, FALSE, TRUE);
 | 
						|
        
 | 
						|
        for (c = 0L; c.pos() < items; ++c)
 | 
						|
        {
 | 
						|
          pi.addstatus(1);
 | 
						|
          TDocumento & curr_doc = (TDocumento &) c.curr();
 | 
						|
        
 | 
						|
          if (curr_doc.in_valuta())
 | 
						|
          {                   
 | 
						|
            TString16 val(curr_doc.get("CODVAL"));
 | 
						|
            const int dec = atoi(cache().get("%VAL", val, "I2"));
 | 
						|
                         
 | 
						|
            if (dec < 6)
 | 
						|
            {                                                                         
 | 
						|
              real change = curr_doc.get_real(DOC_CAMBIO);
 | 
						|
              change.round(dec);
 | 
						|
              curr_doc.put(DOC_CAMBIO, change);
 | 
						|
            }
 | 
						|
          }
 | 
						|
          else
 | 
						|
            if (curr_doc.get_bool(DOC_CONTROEURO))
 | 
						|
            {
 | 
						|
              curr_doc.dirty_fields();
 | 
						|
              curr_doc.put(DOC_CONTROEURO, "");
 | 
						|
            }    
 | 
						|
          real tot = curr_doc.totale_doc();
 | 
						|
          curr_doc.dirty_fields();
 | 
						|
          curr_doc.rewrite();
 | 
						|
        }
 | 
						|
      }
 | 
						|
}
 | 
						|
 | 
						|
int baeur06(int argc, char* argv[])
 | 
						|
{  
 | 
						|
  TEuro06_app ma;
 | 
						|
  ma.run(argc, argv, "");
 | 
						|
  
 | 
						|
  return 0;
 | 
						|
}
 |