estratti conto git-svn-id: svn://10.65.10.50/trunk@2093 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			397 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			397 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#ifndef __APPLICAT_H
 | 
						|
#include <applicat.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __MASK_H
 | 
						|
#include <mask.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __FORM_H
 | 
						|
#include <form.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __RELATION_H
 | 
						|
#include <relation.h>
 | 
						|
#endif              
 | 
						|
 | 
						|
#ifndef __URLDEFID_H
 | 
						|
#include <urldefid.h>                    
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __SHEET_H
 | 
						|
#include <sheet.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __LFFILES_H
 | 
						|
#include <lffiles.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#include "sc2.h"
 | 
						|
#include "sc2100a.h"                    
 | 
						|
 | 
						|
class TStampaEC_application : public TApplication
 | 
						|
{                   
 | 
						|
  enum what {clienti, fornitori};
 | 
						|
  
 | 
						|
  // begin AARGH               
 | 
						|
  TRelation*     _clifo_rel;
 | 
						|
  TCursor*       _cli_cur_k1;
 | 
						|
  TCursor*       _cli_cur_k2;
 | 
						|
  TCursor*       _for_cur_k1;
 | 
						|
  TCursor*       _for_cur_k2;
 | 
						|
  TCursor_sheet* _cli_sh_k1;
 | 
						|
  TCursor_sheet* _cli_sh_k2;
 | 
						|
  TCursor_sheet* _for_sh_k1;
 | 
						|
  TCursor_sheet* _for_sh_k2;
 | 
						|
  // end AARGH
 | 
						|
 | 
						|
  what           _what;      
 | 
						|
  int            _key;
 | 
						|
  TBit_array     _selected;
 | 
						|
 | 
						|
  TRelation*     _ditta;
 | 
						|
                                            
 | 
						|
protected:
 | 
						|
  
 | 
						|
  virtual bool create();
 | 
						|
  virtual bool destroy();  
 | 
						|
  virtual bool menu(MENU_TAG m);
 | 
						|
  
 | 
						|
  long select_clifo_range(TMask& m, long from, long to);
 | 
						|
  
 | 
						|
  static TStampaEC_application& app() { return (TStampaEC_application&)main_app(); }
 | 
						|
  
 | 
						|
  // handlers
 | 
						|
  static bool bfrom_handler(TMask_field& f, KEY k);
 | 
						|
  static bool bto_handler(TMask_field& f, KEY k);
 | 
						|
  static bool ffrom_handler(TMask_field& f, KEY k);
 | 
						|
  static bool fto_handler(TMask_field& f, KEY k);
 | 
						|
  static bool breset_handler(TMask_field& f, KEY k);
 | 
						|
  static bool bselect_handler(TMask_field& f, KEY k);
 | 
						|
  static bool rclifo_handler(TMask_field& f, KEY k);
 | 
						|
  static bool rsortcf_handler(TMask_field& f, KEY k);
 | 
						|
 | 
						|
  void   set_clifo_limits(TMask&);
 | 
						|
  
 | 
						|
public:
 | 
						|
  
 | 
						|
  bool select_ec();                 // starting point 
 | 
						|
  bool print_selected();                          
 | 
						|
  bool print_ec(long clifo);
 | 
						|
 | 
						|
  TCursor_sheet* cur_sheet();     
 | 
						|
  
 | 
						|
  // utils per handlers
 | 
						|
  void reset_sheets(TMask& m);
 | 
						|
  void set_what(what w) {_what = w; }
 | 
						|
  void set_key (int  k) {_key  = k; }
 | 
						|
  
 | 
						|
  TStampaEC_application();
 | 
						|
  virtual ~TStampaEC_application() {}
 | 
						|
};
 | 
						|
 | 
						|
// handlers
 | 
						|
bool TStampaEC_application::bfrom_handler(TMask_field& f, KEY k)
 | 
						|
{                                                
 | 
						|
  if (k == K_SPACE)
 | 
						|
  {
 | 
						|
    app().cur_sheet()->disable_check();
 | 
						|
    if (app().cur_sheet()->run() == K_ENTER)
 | 
						|
    {      
 | 
						|
      TToken_string& t = app().cur_sheet()->row(app().cur_sheet()->selected());
 | 
						|
      long cod1 = t.get_long(1);
 | 
						|
      long cod2 = f.mask().get_long(F_CFCODTO);
 | 
						|
      f.mask().set(F_CFCODFR, cod1);
 | 
						|
      app().select_clifo_range(f.mask(), cod1, cod2);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::bto_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_SPACE)
 | 
						|
  {
 | 
						|
    app().cur_sheet()->disable_check();
 | 
						|
    if (app().cur_sheet()->run() == K_ENTER)
 | 
						|
    {      
 | 
						|
      TToken_string& t = app().cur_sheet()->row(app().cur_sheet()->selected());
 | 
						|
      long cod2 = t.get_long(1);
 | 
						|
      long cod1 = f.mask().get_long(F_CFCODFR); 
 | 
						|
      f.mask().set(F_CFCODTO, cod2);
 | 
						|
      app().select_clifo_range(f.mask(), cod1, cod2);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::ffrom_handler(TMask_field& f, KEY k)
 | 
						|
{    
 | 
						|
  if (!f.focusdirty()) return TRUE;                                          
 | 
						|
 | 
						|
  if (k == K_TAB)
 | 
						|
  {
 | 
						|
    long cod1 = atol(f.get());
 | 
						|
    long cod2 = f.mask().get_long(F_CFCODTO); 
 | 
						|
    app().select_clifo_range(f.mask(), cod1, cod2);
 | 
						|
  }
 | 
						|
  else if (k == K_F9)
 | 
						|
    app().bfrom_handler(f.mask().field(B_CFCODFR), K_SPACE);
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::fto_handler(TMask_field& f, KEY k)
 | 
						|
{                                                
 | 
						|
  if (!f.focusdirty()) return TRUE;                                          
 | 
						|
 | 
						|
  if (k == K_TAB)
 | 
						|
  {
 | 
						|
    long cod2 = atol(f.get());
 | 
						|
    long cod1 = f.mask().get_long(F_CFCODFR); 
 | 
						|
    app().select_clifo_range(f.mask(), cod1, cod2);
 | 
						|
  }
 | 
						|
  else if (k == K_F9)
 | 
						|
    app().bfrom_handler(f.mask().field(B_CFCODTO), K_SPACE);
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::breset_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_SPACE)
 | 
						|
    app().reset_sheets(f.mask());
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::bselect_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_SPACE)
 | 
						|
  {
 | 
						|
    app().cur_sheet()->enable_check();
 | 
						|
    app().cur_sheet()->run();
 | 
						|
  }
 | 
						|
  app().set_clifo_limits(f.mask());
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::rclifo_handler(TMask_field& f, KEY k)
 | 
						|
{   
 | 
						|
  if (k == K_SPACE)
 | 
						|
  {
 | 
						|
    app().set_what(f.get() == "1" ? clienti : fornitori);
 | 
						|
    app().reset_sheets(f.mask());
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::rsortcf_handler(TMask_field& f, KEY k)
 | 
						|
{   
 | 
						|
  if (k == K_SPACE)
 | 
						|
  {
 | 
						|
    app().set_key(atoi(f.get()));
 | 
						|
    app().reset_sheets(f.mask());
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
long TStampaEC_application::select_clifo_range(TMask& m, long from, long to)
 | 
						|
{
 | 
						|
  long nsel = 0;                                   
 | 
						|
  
 | 
						|
  if (cur_sheet()->items() == 0)
 | 
						|
  {
 | 
						|
    beep();
 | 
						|
    return 0l;
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (to == 0l)
 | 
						|
    to = cur_sheet()->row(cur_sheet()->items() - 1).get_long(1);
 | 
						|
  if (from == 0l)
 | 
						|
    from = cur_sheet()->row(0).get_long(1);
 | 
						|
 | 
						|
  if (from > to)
 | 
						|
  {
 | 
						|
    long tmp = to;
 | 
						|
    to = from;
 | 
						|
    from = tmp;
 | 
						|
  }                           
 | 
						|
  
 | 
						|
  bool go = FALSE;  
 | 
						|
  bool cod1ok = FALSE, cod2ok = FALSE;
 | 
						|
  long last = 0l;
 | 
						|
  long firs = 0l;
 | 
						|
  
 | 
						|
  for (long i = 0; i < cur_sheet()->items(); i++)
 | 
						|
  {
 | 
						|
    TToken_string& tt = cur_sheet()->row(i);
 | 
						|
    long cod = tt.get_long(1);  
 | 
						|
    if (cod >= from && cod <= to)
 | 
						|
    {
 | 
						|
      cur_sheet()->check(i);
 | 
						|
      nsel ++;         
 | 
						|
      if (firs == 0l) firs = cod;
 | 
						|
      last = cod; 
 | 
						|
    }
 | 
						|
    else cur_sheet()->uncheck(i);
 | 
						|
    
 | 
						|
    if (cod == from) cod1ok = TRUE; 
 | 
						|
    if (cod == to)   cod2ok = TRUE; 
 | 
						|
  }     
 | 
						|
  
 | 
						|
  if (!cod1ok) from = firs;                     
 | 
						|
  if (!cod2ok) to   = last;                     
 | 
						|
  
 | 
						|
  m.set(F_CFCODFR, from);
 | 
						|
  m.set(F_CFCODTO, to);
 | 
						|
  m.set(F_NSEL,    nsel);
 | 
						|
  return 0l;
 | 
						|
}
 | 
						|
 | 
						|
void TStampaEC_application::reset_sheets(TMask& m)
 | 
						|
{
 | 
						|
  _cli_sh_k1->uncheck(-1);
 | 
						|
  _cli_sh_k2->uncheck(-1);
 | 
						|
  _for_sh_k1->uncheck(-1);
 | 
						|
  _for_sh_k2->uncheck(-1);
 | 
						|
  
 | 
						|
  m.set(F_CFCODFR,"");
 | 
						|
  m.set(F_CFCODTO,"");
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::select_ec()
 | 
						|
{
 | 
						|
  TMask m("sc2100a");
 | 
						|
  KEY k;            
 | 
						|
  
 | 
						|
  m.set_handler(R_CLIFO,   rclifo_handler); 
 | 
						|
  m.set_handler(R_SORTCF,  rsortcf_handler); 
 | 
						|
  m.set_handler(B_CFCODFR, bfrom_handler); 
 | 
						|
  m.set_handler(B_CFCODTO, bto_handler); 
 | 
						|
  m.set_handler(B_SELECT,  bselect_handler); 
 | 
						|
  m.set_handler(B_RESET,   breset_handler); 
 | 
						|
  m.set_handler(F_CFCODFR, ffrom_handler); 
 | 
						|
  m.set_handler(F_CFCODTO, fto_handler); 
 | 
						|
  
 | 
						|
  if (_ditta->good())
 | 
						|
  {
 | 
						|
    m.set(F_COMSEND,   _ditta->lfile(LF_COMUNI).get("COM"));
 | 
						|
    m.set(F_LUOGOSEND, _ditta->lfile(LF_COMUNI).get("DENCOM"));
 | 
						|
  }
 | 
						|
  
 | 
						|
  while ((k = m.run()) != K_ESC)
 | 
						|
    if (k == K_ENTER)
 | 
						|
      print_selected();
 | 
						|
  
 | 
						|
  return k != K_ESC;
 | 
						|
}                                                     
 | 
						|
 | 
						|
void TStampaEC_application::set_clifo_limits(TMask& m)
 | 
						|
{  
 | 
						|
  long first = 0, last = 0;
 | 
						|
  bool primo = FALSE;                                               
 | 
						|
  for (int i = 0; i < cur_sheet()->items(); i++)
 | 
						|
  {
 | 
						|
    if (cur_sheet()->checked(i))
 | 
						|
    {                     
 | 
						|
      TToken_string& t = cur_sheet()->row(i);
 | 
						|
      long kod = t.get_long(1);
 | 
						|
      if (!primo++) first = last = kod; 
 | 
						|
      if (first > kod) first = kod; 
 | 
						|
      if (last  < kod) last  = kod; 
 | 
						|
    }
 | 
						|
  }   
 | 
						|
  m.set(F_CFCODFR, first);
 | 
						|
  m.set(F_CFCODTO, last);
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::print_selected()
 | 
						|
{
 | 
						|
  for (int i = 0; i < cur_sheet()->items(); i++)
 | 
						|
  {
 | 
						|
    if (cur_sheet()->checked(i))
 | 
						|
    {
 | 
						|
      TToken_string& t = cur_sheet()->row(i);
 | 
						|
      print_ec(t.get_long(1)); 
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;  
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::print_ec(long clifo)
 | 
						|
{
 | 
						|
  return TRUE;  
 | 
						|
}                 
 | 
						|
 | 
						|
TCursor_sheet* TStampaEC_application::cur_sheet()
 | 
						|
{
 | 
						|
  if (_key == 1) return (_what == clienti ? _cli_sh_k1 : _for_sh_k1);
 | 
						|
  else           return (_what == clienti ? _cli_sh_k2 : _for_sh_k2);
 | 
						|
}                 
 | 
						|
 | 
						|
bool TStampaEC_application::create()
 | 
						|
{                           
 | 
						|
  TApplication::create();
 | 
						|
  
 | 
						|
  // crea relazioni, cursori e cursor_sheets
 | 
						|
  _clifo_rel  = new TRelation(LF_CLIFO);
 | 
						|
  
 | 
						|
  _cli_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"C\"", 1);
 | 
						|
  _cli_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"C\"", 2);
 | 
						|
  _for_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 1);
 | 
						|
  _for_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 2);
 | 
						|
  
 | 
						|
  _cli_sh_k1 = new TCursor_sheet(_cli_cur_k1, " |CODCF|RAGSOC", "Selezione clienti per codice",
 | 
						|
                                 "@1|Codice|Ragione Sociale@50");
 | 
						|
  _cli_sh_k2 = new TCursor_sheet(_cli_cur_k2, " |RAGSOC|CODCF", "Selezione clienti per ragione sociale",
 | 
						|
                                 "@1|Ragione Sociale@50|Codice");
 | 
						|
  _for_sh_k1 = new TCursor_sheet(_for_cur_k1, " |CODCF|RAGSOC", "Selezione fornitori per codice",
 | 
						|
                                 "@1|Codice|Ragione Sociale@50");
 | 
						|
  _for_sh_k2 = new TCursor_sheet(_for_cur_k2, " |RAGSOC|CODCF", "Selezione fornitori per ragione sociale",
 | 
						|
                                 "@1|Ragione Sociale@50|Codice");
 | 
						|
  
 | 
						|
  // relasiun per la ditta defiga
 | 
						|
  _ditta     = new TRelation(LF_NDITTE);
 | 
						|
  _ditta->add(LF_ANAG,   "TIPOA==TIPOA|CODANAGR==CODANAGR");
 | 
						|
  _ditta->add(LF_COMUNI, "COM==COMRF(COMRES)", 1, LF_ANAG);
 | 
						|
  
 | 
						|
  _ditta->zero();
 | 
						|
  _ditta->lfile().put("CODDITTA", get_firm());
 | 
						|
  _ditta->read();
 | 
						|
  
 | 
						|
  dispatch_e_menu(MENU_ITEM(1));
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::destroy()
 | 
						|
{ 
 | 
						|
  delete _for_sh_k2;
 | 
						|
  delete _for_sh_k1;
 | 
						|
  delete _cli_sh_k2;
 | 
						|
  delete _cli_sh_k1;
 | 
						|
  delete _for_cur_k2;
 | 
						|
  delete _for_cur_k1;
 | 
						|
  delete _cli_cur_k2;
 | 
						|
  delete _cli_cur_k1;
 | 
						|
  delete _clifo_rel;
 | 
						|
 | 
						|
  return TApplication::destroy();
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaEC_application::menu(MENU_TAG m)
 | 
						|
{
 | 
						|
  if (m == MENU_ITEM(1)) 
 | 
						|
    return select_ec();  
 | 
						|
  else return TApplication::menu(m);     
 | 
						|
}                
 | 
						|
 | 
						|
TStampaEC_application::TStampaEC_application() : _selected(10000), _what(clienti), _key(1)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
int sc2100(int argc, char** argv)
 | 
						|
{
 | 
						|
  TStampaEC_application app;
 | 
						|
  app.run(argc, argv, "Stampa Estratti Conto");
 | 
						|
  return 0;
 | 
						|
}
 |