Patch level :4.0 nopatch
Files correlati : Ricompilazione Demo : [ ] Commento :accoppato vereplib e sostituito con il piu' avanzato velib07 git-svn-id: svn://10.65.10.50/trunk@14669 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									4fef812bc2
								
							
						
					
					
						commit
						c8da121068
					
				
							
								
								
									
										146
									
								
								ve/vereplib.cpp
									
									
									
									
									
								
							
							
						
						
									
										146
									
								
								ve/vereplib.cpp
									
									
									
									
									
								
							@ -1,146 +0,0 @@
 | 
				
			|||||||
#include <xvt.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "vereplib.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// TDocument_cache
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TDocument_cache : TCache
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
  virtual TObject* key2obj(const char* key);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  TDocumento& doc(const TRectype& rec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TDocument_cache() : TCache(23) { }
 | 
					 | 
				
			||||||
  virtual ~TDocument_cache() { }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TObject* TDocument_cache::key2obj(const char* key)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TToken_string k(key);
 | 
					 | 
				
			||||||
  const char provv = *k.get(0);
 | 
					 | 
				
			||||||
  const int anno = k.get_int();
 | 
					 | 
				
			||||||
  const TString4 codnum= k.get();
 | 
					 | 
				
			||||||
  const long ndoc = k.get_long();
 | 
					 | 
				
			||||||
  return new TDocumento(provv, anno, codnum, ndoc);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TDocumento& TDocument_cache::doc(const TRectype& rec)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TToken_string key;
 | 
					 | 
				
			||||||
  key = rec.get(DOC_PROVV);
 | 
					 | 
				
			||||||
  key.add(rec.get(DOC_ANNO));
 | 
					 | 
				
			||||||
  key.add(rec.get(DOC_CODNUM));
 | 
					 | 
				
			||||||
  key.add(rec.get(DOC_NDOC));
 | 
					 | 
				
			||||||
  TDocumento& d =  *(TDocumento*)objptr(key);
 | 
					 | 
				
			||||||
  return d;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const TDocumento& rec2doc(const TRectype& rec)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  static TDocument_cache* _cache = NULL;
 | 
					 | 
				
			||||||
  if (_cache == NULL)
 | 
					 | 
				
			||||||
    _cache = new TDocument_cache;
 | 
					 | 
				
			||||||
  return _cache->doc(rec);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// TDocument_recordset
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const TVariant& TDocument_recordset::get(int num, const char* field) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const int idx = relation()->log2ind(num);
 | 
					 | 
				
			||||||
  if (idx < 0)
 | 
					 | 
				
			||||||
    return NULL_VARIANT;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const TRectype& rec = relation()->file(idx).curr();
 | 
					 | 
				
			||||||
  const int logic = rec.num();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Se non e' un campo standard, ma e' calcolato da una formula...
 | 
					 | 
				
			||||||
  if ((logic == LF_DOC || logic == LF_RIGHEDOC) && rec.type(field) == _nullfld)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    TVariant& var = get_tmp_var();
 | 
					 | 
				
			||||||
    const TDocumento& doc = rec2doc(rec);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if (xvt_str_compare_ignoring_case(field, "SEGNO") == 0)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      var = doc.is_nota_credito() ? -UNO : UNO;   
 | 
					 | 
				
			||||||
    } else
 | 
					 | 
				
			||||||
    if (xvt_str_compare_ignoring_case(field, "IS_COSTO") == 0)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
			bool costo = (doc.tipo().is_costo()) || (!doc.tipo().is_ricavo() && doc.get_char(DOC_TIPOCF)=='F');
 | 
					 | 
				
			||||||
      var = costo ? UNO : ZERO;
 | 
					 | 
				
			||||||
    } else
 | 
					 | 
				
			||||||
    if (xvt_str_compare_ignoring_case(field, "IS_RICAVO") == 0)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
			bool ricavo = (doc.tipo().is_ricavo()) || (!doc.tipo().is_costo() && doc.get_char(DOC_TIPOCF)=='C');
 | 
					 | 
				
			||||||
      var = ricavo ? UNO : ZERO;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      const TFieldref ref(field, logic);
 | 
					 | 
				
			||||||
      if (logic == LF_DOC)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        var = ref.read(doc);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        const int nriga = rec.get_int(RDOC_NRIGA);
 | 
					 | 
				
			||||||
        if (nriga > 0 && nriga <= doc.rows())
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          const TRiga_documento& rdoc = doc[nriga];
 | 
					 | 
				
			||||||
          var = ref.read(rdoc);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
          var = NULL_VARIANT;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return var;     
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return TISAM_recordset::get(num, field);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TDocument_recordset::TDocument_recordset(const char* use) 
 | 
					 | 
				
			||||||
                   : TISAM_recordset(use) 
 | 
					 | 
				
			||||||
{ }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TDocument_recordset::~TDocument_recordset() 
 | 
					 | 
				
			||||||
{ }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// TDocument_report
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TDocument_report::set_recordset(const TString& query)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  return TReport::set_recordset(new TDocument_recordset(query));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TDocument_report::load(const char* name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const bool ok = TReport::load(name);
 | 
					 | 
				
			||||||
  if (ok)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    // Purtroppo il recordset delle sottosezioni deve essere reimpostato a mano
 | 
					 | 
				
			||||||
    for (int i = 11; i <= 999; i++)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      TReport_section* sec = find_section('B', i);
 | 
					 | 
				
			||||||
      if (sec != NULL)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        TRecordset* recset = sec->recordset();
 | 
					 | 
				
			||||||
        if (recset != NULL)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          const TString use = recset->query_text();
 | 
					 | 
				
			||||||
          recset = new TDocument_recordset(use);
 | 
					 | 
				
			||||||
          sec->set_recordset(recset);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return ok;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user