200 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
 | 
						|
#include <applicat.h>
 | 
						|
#include <config.h>
 | 
						|
#include <form.h>
 | 
						|
#include <printer.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <urldefid.h>                    
 | 
						|
 | 
						|
#include "sc2.h"
 | 
						|
#include "sc2402.h"
 | 
						|
#include "sc2102.h"
 | 
						|
#include "sc2400a.h"
 | 
						|
 | 
						|
#include <clifo.h>
 | 
						|
 | 
						|
 | 
						|
  
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Stampa solleciti
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TStampaSol_application: public TApplication {                   
 | 
						|
  TSol_mask *_msk;
 | 
						|
  TSol_form *_form;
 | 
						|
  TString _lingua_ditta;
 | 
						|
  bool _gesval;
 | 
						|
  TFile_array _file;
 | 
						|
                                            
 | 
						|
protected:
 | 
						|
  virtual bool create();
 | 
						|
  virtual bool destroy();  
 | 
						|
  virtual bool menu(MENU_TAG mt);
 | 
						|
  virtual void on_firm_change();
 | 
						|
 | 
						|
public:
 | 
						|
  TSol_mask &mask() { return *_msk; }
 | 
						|
  TSol_form &form() { return *_form; }
 | 
						|
  TCursor_sheet &sheet() { return _msk->cur_sheet(); }
 | 
						|
  
 | 
						|
  bool print_selected(); // cicla la stampa sugli elementi selezionati
 | 
						|
  bool print_sol(); // stampa l'elemento corrente
 | 
						|
 | 
						|
  TStampaSol_application();
 | 
						|
  virtual ~TStampaSol_application() {}
 | 
						|
};
 | 
						|
 | 
						|
bool TStampaSol_application::print_selected() {            
 | 
						|
  TCursor_sheet &s = sheet();         
 | 
						|
  TCursor &c = *s.cursor();
 | 
						|
 | 
						|
  const char who = mask().get_who(); 
 | 
						|
  const int key = mask().get_key();
 | 
						|
  
 | 
						|
  // filtra il cursore del form in mode che diventi uguale al cursor_sheet corrente   
 | 
						|
  TCursor &fc = *form().cursor();
 | 
						|
  fc.setkey(key);
 | 
						|
  TRectype filter(LF_CLIFO);
 | 
						|
  filter.put(CLI_TIPOCF, who);
 | 
						|
  fc.setregion(filter, filter);
 | 
						|
  
 | 
						|
  const long print_all = !s.one_checked(); // se non ho selezionato nulla allora li stampo tutti
 | 
						|
  long analfabeti = 0; // persone non stampate in quanto aventi lingua errata
 | 
						|
  
 | 
						|
  printer().open();
 | 
						|
  
 | 
						|
  const long items = c.items();
 | 
						|
  for (long i=0; i < items; i++) if (print_all || s.checked(i)) {                                    
 | 
						|
    fc= i; // muove il cursore alla posizione corrente
 | 
						|
    
 | 
						|
    const bool ok = print_sol(); 
 | 
						|
    if (!ok) analfabeti++;
 | 
						|
  }
 | 
						|
  printer().formfeed();
 | 
						|
  printer().close();
 | 
						|
  
 | 
						|
  if (analfabeti > 0) {
 | 
						|
    warning_box("%ld clienti non sono stati stampati in quanto "
 | 
						|
                "il codice lingua non corrispondeva al profilo di stampa", analfabeti);
 | 
						|
  }
 | 
						|
  
 | 
						|
  return TRUE;  
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaSol_application::print_sol() {
 | 
						|
  TSol_form &f= form();
 | 
						|
 | 
						|
  // preparazione variabili per controllo lingua
 | 
						|
  const TRectype &clf= f.cursor()->file().curr();
 | 
						|
  const TString lincf(clf.get(CLI_CODLIN));
 | 
						|
  bool ok= TRUE;
 | 
						|
 | 
						|
  // controllo lingua ditta corrente
 | 
						|
  if ((f.lingua() == _lingua_ditta && !lincf.empty()) || f.lingua() != _lingua_ditta) ok= (lincf == f.lingua());
 | 
						|
  if (!ok) return FALSE; // cliente analfabeta
 | 
						|
  
 | 
						|
  // filtra solo le partite del cliente selezionato
 | 
						|
  TLocalisamfile& partite = _file[LF_PARTITE];
 | 
						|
  partite.zero();
 | 
						|
  partite.put(PART_TIPOCF, clf.get(CLI_TIPOCF));
 | 
						|
  partite.put(PART_SOTTOCONTO, clf.get(CLI_CODCF));
 | 
						|
  const TRectype filter(partite.curr());
 | 
						|
  
 | 
						|
  bool one_printed = FALSE; // booleano di controllo di riuscita della stampa
 | 
						|
  const bool sel_tot_saldo = f.get_sel_tot_saldo(); // selezione sul saldo totale cliente
 | 
						|
  const real sel_importo(f.get_sel_importo());   // importo di selezione
 | 
						|
  const TDate data_limite_soll(f.data_limite_operazione());
 | 
						|
  
 | 
						|
  if (sel_tot_saldo)
 | 
						|
  {                   
 | 
						|
    TImporto saldo;
 | 
						|
    
 | 
						|
    for (int err = partite.read(_isgteq); 
 | 
						|
       err == NOERR && partite.curr() == filter; 
 | 
						|
       err = partite.read(_isgreat))
 | 
						|
    {                                
 | 
						|
      TPartita game(partite.curr());
 | 
						|
      saldo += game.calcola_saldo_al(FALSE, data_limite_soll);
 | 
						|
    }
 | 
						|
    saldo.normalize(f.sezione_normale());
 | 
						|
    
 | 
						|
    if (saldo.valore() < sel_importo) 
 | 
						|
      return TRUE;
 | 
						|
  }
 | 
						|
  for (int err = partite.read(_isgteq); 
 | 
						|
       err == NOERR && partite.curr() == filter; 
 | 
						|
       err = partite.read(_isgreat))
 | 
						|
  {                                
 | 
						|
    TPartita game(partite.curr()); 
 | 
						|
    TImporto saldo(game.calcola_saldo_al(FALSE, data_limite_soll));
 | 
						|
    
 | 
						|
    saldo.normalize(f.sezione_normale());
 | 
						|
    
 | 
						|
    if (sel_tot_saldo || saldo.valore() >= sel_importo )
 | 
						|
    {                         
 | 
						|
      const bool printed = form().print_game(game);
 | 
						|
      if (printed) 
 | 
						|
        one_printed = TRUE;
 | 
						|
    }
 | 
						|
    
 | 
						|
    partite.put(PART_NRIGA, 9999);
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (one_printed)
 | 
						|
    printer().formfeed();
 | 
						|
  
 | 
						|
 
 | 
						|
  return TRUE;  
 | 
						|
} 
 | 
						|
 | 
						|
bool TStampaSol_application::create() {                           
 | 
						|
  TApplication::create();
 | 
						|
  
 | 
						|
  _file.open(LF_TABCOM, LF_TAB, LF_CAUSALI, LF_MOV, LF_RMOV, 0);
 | 
						|
  _file.open(LF_NDITTE, LF_ANAG, LF_COMUNI, 0);
 | 
						|
  _file.open(LF_CLIFO, LF_PARTITE, LF_SCADENZE, LF_PAGSCA ,0);
 | 
						|
  
 | 
						|
  _msk= new TSol_mask("sc2400a");
 | 
						|
  
 | 
						|
  dispatch_e_menu(MENU_ITEM(1));
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaSol_application::destroy() {               
 | 
						|
  delete _msk;
 | 
						|
  _file.close();
 | 
						|
  return TApplication::destroy();
 | 
						|
}
 | 
						|
 | 
						|
void TStampaSol_application::on_firm_change() {        
 | 
						|
  TApplication::on_firm_change();
 | 
						|
  TConfig c(CONFIG_DITTA, "cg");
 | 
						|
  _lingua_ditta= c.get("CodLin");
 | 
						|
  _gesval= c.get_bool("GesVal");
 | 
						|
}  
 | 
						|
 | 
						|
bool TStampaSol_application::menu(MENU_TAG mt)
 | 
						|
 | 
						|
{
 | 
						|
  TSol_mask &m= mask();
 | 
						|
  while (m.run() == K_ENTER)
 | 
						|
  {
 | 
						|
    _form= new TSol_form(m, F_DATALIMSOL);
 | 
						|
    print_selected();
 | 
						|
    delete _form;
 | 
						|
    _form= NULL;
 | 
						|
  }
 | 
						|
  return FALSE;
 | 
						|
}                
 | 
						|
 | 
						|
TStampaSol_application::TStampaSol_application(): _lingua_ditta(1), _msk(NULL), _form(NULL) {}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
int sc2400(int argc, char** argv) {
 | 
						|
  TStampaSol_application app;
 | 
						|
  
 | 
						|
  app.run(argc, argv, "Stampa solleciti");
 | 
						|
  return 0;
 | 
						|
}
 |