Files correlati : lv1 Ricompilazione Demo : [ ] Commento : Stampa buoni direttamente senza visualizzare il dialogo di impostazione stampante git-svn-id: svn://10.65.10.50/trunk@19841 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			198 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <execp.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <reprint.h>
 | 
						|
 | 
						|
#include "lv1100a.h"
 | 
						|
#include "../ve/velib.h"
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TStampaBuoni_mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TStampaBuoni_mask: public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
public:
 | 
						|
	TStampaBuoni_mask();
 | 
						|
};
 | 
						|
 | 
						|
TStampaBuoni_mask::TStampaBuoni_mask() : TAutomask("lv1100a") 
 | 
						|
{
 | 
						|
  // Riutilizza astutamente il titolo dell'applicazione per la maschera
 | 
						|
  const TApplication& app = main_app();
 | 
						|
  const TString& title = app.title();
 | 
						|
  set_caption(title);
 | 
						|
 | 
						|
  TConfig configlv(CONFIG_DITTA, "lv");
 | 
						|
  const char tipobuoni = app.argc() > 2 ? toupper(app.argv(2)[0]) : 'C';
 | 
						|
  switch (tipobuoni)
 | 
						|
  {
 | 
						|
  case 'C': 
 | 
						|
  	set(F_CODNUM, configlv.get("NUM_GEN"));
 | 
						|
		set(F_TIPODOC, configlv.get("TIPODOC_GEN"));
 | 
						|
    break;
 | 
						|
  case 'P': 
 | 
						|
		set(F_CODNUM, configlv.get("NUM_PRE(0)"));
 | 
						|
		set(F_TIPODOC, configlv.get("TIPODOC_PRE(0)"));
 | 
						|
		break;
 | 
						|
  case 'R': 
 | 
						|
	default :
 | 
						|
  	set(F_CODNUM, configlv.get("NUM_RIT(0)"));
 | 
						|
		set(F_TIPODOC, configlv.get("TIPODOC_RIT(0)"));
 | 
						|
    break;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
bool TStampaBuoni_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{ return true; }
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TStampaBuoni_set
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TStampaBuoni_set : public TISAM_recordset
 | 
						|
{
 | 
						|
protected:
 | 
						|
  static bool status_filter(const TRelation* rel);
 | 
						|
  virtual void set_custom_filter(TCursor& cursor) const;
 | 
						|
 | 
						|
public:
 | 
						|
  TStampaBuoni_set(const TMask& mask);
 | 
						|
};
 | 
						|
 | 
						|
// Accetta solo i documenti stampabili in definitivo
 | 
						|
bool TStampaBuoni_set::status_filter(const TRelation* rel)
 | 
						|
{
 | 
						|
  const TRectype& doc = rel->curr();
 | 
						|
  const char stato_attuale = doc.get_char(DOC_STATO);
 | 
						|
  if (stato_attuale <= ' ')
 | 
						|
    return true;
 | 
						|
 | 
						|
  const TTipo_documento& tipo = cached_tipodoc(doc.get(DOC_TIPODOC));
 | 
						|
  if (stato_attuale == tipo.stato_finale_stampa())  
 | 
						|
    return false;
 | 
						|
  
 | 
						|
  const TString& stati_stampa = tipo.stati_iniziali_stampa();
 | 
						|
  return stati_stampa.blank() || stati_stampa.find(stato_attuale) >= 0;
 | 
						|
}
 | 
						|
 | 
						|
void TStampaBuoni_set::set_custom_filter(TCursor& cursor) const
 | 
						|
{
 | 
						|
  cursor.set_filterfunction(status_filter);
 | 
						|
}
 | 
						|
 | 
						|
TStampaBuoni_set::TStampaBuoni_set(const TMask& mask) : TISAM_recordset("USE DOC")
 | 
						|
{
 | 
						|
  const TDate data_from = mask.get_date(F_DATA_FROM);
 | 
						|
	TString query = "USE DOC \n"
 | 
						|
									"SELECT (BETWEEN(DATADOC,#DATA_FROM,#DATA_TO))"
 | 
						|
									"&&(BETWEEN(CODCF,#CODCF_FROM,#CODCF_TO))"
 | 
						|
									"&&(BETWEEN(G1:CODITI,#CODITI_FROM,#CODITI_TO))\n"
 | 
						|
									"JOIN CLIFO INTO TIPOCF=='C' CODCF==CODCF\n"
 | 
						|
                  "JOIN %STD INTO CODTAB==STATO\n"
 | 
						|
									;
 | 
						|
  query << "FROM PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n"
 | 
						|
				<< "TO PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n";
 | 
						|
  set(query);                     
 | 
						|
  //inserire parametri filtri
 | 
						|
  set_var("#DATA_FROM", data_from);
 | 
						|
  set_var("#DATA_TO",	mask.get_date(F_DATA_TO)); 
 | 
						|
  set_var("#CODCF_FROM", TVariant(mask.get(F_CODCF_FROM)));
 | 
						|
  set_var("#CODCF_TO", TVariant(mask.get(F_CODCF_TO)));
 | 
						|
  set_var("#CODITI_FROM", TVariant(mask.get(F_CODITI_FROM)));
 | 
						|
  set_var("#CODITI_TO", TVariant(mask.get(F_CODITI_TO)));
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TStampaBuoni_app
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TStampaBuoni_app: public TSkeleton_application
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual void main_loop();
 | 
						|
  void elabora(const TMask& mask, const char action) const;
 | 
						|
};
 | 
						|
 | 
						|
void TStampaBuoni_app::elabora(const TMask& mask, const char action) const
 | 
						|
{
 | 
						|
  TStampaBuoni_set buoni(mask);
 | 
						|
 | 
						|
	TCursor* c = buoni.cursor();
 | 
						|
  TCursor_sheet sht(c, " |NDOC|DATADOC|4->S0[1,25]|G1:CODITI|CODCF|20->RAGSOC", TR("Selezione Documenti"),
 | 
						|
                   HR("@1|Numero\nDoc.@7|Data\nDoc.@10|Stato@25|Itinerario|Cliente|Ragione Sociale@50"));
 | 
						|
  sht.check(-1);
 | 
						|
  if (sht.run() && sht.one_checked())
 | 
						|
  {
 | 
						|
    TFilename tmp; 
 | 
						|
    tmp.temp("", "ini");
 | 
						|
 | 
						|
    // Ensure that the ofstream is well closed before ve1 call
 | 
						|
    if (tmp.full()) // dummy test
 | 
						|
    {
 | 
						|
    	const TDate data_from = mask.get_date(F_DATA_FROM);
 | 
						|
      const TString& cod_num = mask.get(F_CODNUM);
 | 
						|
    	TString16 chiavedoc; // Parte della chiave comune a tutti i documenti
 | 
						|
    	chiavedoc << "D|" << data_from.year() << "|" <<	cod_num << "|";
 | 
						|
 | 
						|
      ofstream outf(tmp);
 | 
						|
  		outf << "[Transaction]" << endl;     // Transaction header  
 | 
						|
  		outf << "Action=" << action << endl; // 'S'tampa o 'A'nteprima
 | 
						|
  		outf << "Mode=D" << endl;            // Definitive (always?) 
 | 
						|
      outf << "NoPrintDlg=X" << endl;      // Dont' prompt the user with the print dialog
 | 
						|
      outf << endl;
 | 
						|
      outf << "[33]" << endl;              // Transaction body
 | 
						|
  		long nx = 0;                         // Document counter
 | 
						|
      FOR_EACH_CHECKED_ROW(sht, i, row)
 | 
						|
  		{
 | 
						|
  			outf << "Doc(" << (nx++) << ")=";
 | 
						|
  		  outf << chiavedoc << row->get(1) << endl;
 | 
						|
  		}
 | 
						|
    }
 | 
						|
 | 
						|
    if (tmp.exist())
 | 
						|
    {
 | 
						|
  		TString cmdline; cmdline << "ve1 -2 -i" << tmp;
 | 
						|
  		TExternal_app app(cmdline);
 | 
						|
  	  app.run();
 | 
						|
  		tmp.fremove();
 | 
						|
    }
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void TStampaBuoni_app::main_loop()
 | 
						|
{
 | 
						|
  TStampaBuoni_mask m;
 | 
						|
	bool running = true;
 | 
						|
  while (running)
 | 
						|
	{
 | 
						|
		const KEY k = m.run();
 | 
						|
		switch (k)
 | 
						|
		{
 | 
						|
		case K_ENTER: elabora(m, 'S'); break; // 'S'tampa
 | 
						|
		case 'A'    :	elabora(m, 'A'); break; // 'A'nteprima
 | 
						|
    case 'P'    : elabora(m, 'P'); break; // 'P'df
 | 
						|
		default     : running = false; break; // quit  
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
int lv1100(int argc, char* argv[])
 | 
						|
{
 | 
						|
  const char* title = NULL;
 | 
						|
  const char tipo = argc > 2 ? toupper(*argv[2]) : 'C';
 | 
						|
  switch (tipo)
 | 
						|
  {
 | 
						|
  case 'C': title = TR("Stampa buoni di consegna"); break;
 | 
						|
  case 'P': title = TR("Stampa buoni di prelievo");	break;
 | 
						|
  case 'R': 
 | 
						|
	default : title = TR("Stampa buoni di ritiro");   break;
 | 
						|
	}
 | 
						|
  TStampaBuoni_app app;
 | 
						|
  app.run(argc, argv, title);
 | 
						|
  return 0;
 | 
						|
}
 |