Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 patch 1358 git-svn-id: svn://10.65.10.50/trunk@18723 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			314 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						||
#include <automask.h>
 | 
						||
#include <execp.h>
 | 
						||
#include <progind.h>
 | 
						||
#include <reputils.h>
 | 
						||
#include <utility.h>
 | 
						||
#include <relation.h>
 | 
						||
#include <reprint.h>
 | 
						||
#include <textset.h>
 | 
						||
#include <recarray.h>
 | 
						||
 | 
						||
 | 
						||
#include "tabutil.h"
 | 
						||
 | 
						||
#include "ps0713.h"
 | 
						||
#include "ps0713500a.h"
 | 
						||
 | 
						||
#include <rcausali.h>
 | 
						||
#include <clifo.h>
 | 
						||
#include <mov.h>
 | 
						||
#include <rmov.h>
 | 
						||
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TAutomask
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TImportaSpese_mask : public TAutomask
 | 
						||
{
 | 
						||
protected:
 | 
						||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
 | 
						||
public:
 | 
						||
  TImportaSpese_mask();
 | 
						||
};
 | 
						||
  
 | 
						||
TImportaSpese_mask::TImportaSpese_mask() :TAutomask ("ps0713500a")
 | 
						||
{
 | 
						||
}  
 | 
						||
 | 
						||
bool TImportaSpese_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
 | 
						||
{ 
 | 
						||
	switch (f.dlg())
 | 
						||
	{
 | 
						||
		//giochetto per avere la lista dei files validi nella directory di trasferimento!
 | 
						||
		case F_NAME:
 | 
						||
			if (e == fe_button)
 | 
						||
			{
 | 
						||
				TArray_sheet as(-1, -1, 72, 20, TR("Selezione file"), 
 | 
						||
                           "File@32");
 | 
						||
				TFilename path = get(F_PATH);
 | 
						||
				path.add("*.csv");	//files delle testate
 | 
						||
				list_files(path, as.rows_array());
 | 
						||
				TFilename name;
 | 
						||
				FOR_EACH_ARRAY_ROW(as.rows_array(), i, row)
 | 
						||
				{
 | 
						||
					name = *row;
 | 
						||
					*row = name.name();
 | 
						||
				}
 | 
						||
				if (as.run() == K_ENTER)
 | 
						||
				{
 | 
						||
					f.set(as.row(as.selected()));
 | 
						||
				}
 | 
						||
			}
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			break;
 | 
						||
	}
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
                                      ///////////////////////////////////////////////
 | 
						||
                                      //// CLASSI DERIVATE PER IMPORTAZIONE DATI ////
 | 
						||
                                      ///////////////////////////////////////////////  
 | 
						||
 | 
						||
/////////////////////////////////////////////////////////////
 | 
						||
//	Recordset specifici per i dati da trasferire
 | 
						||
/////////////////////////////////////////////////////////////
 | 
						||
 | 
						||
//Piano dei conti
 | 
						||
class TImporta_spese_recordset : public TCSV_recordset
 | 
						||
{
 | 
						||
  protected:
 | 
						||
    virtual TRecnotype new_rec(const char* buf = NULL);    
 | 
						||
  
 | 
						||
  public:
 | 
						||
    TImporta_spese_recordset(const char * fileName);
 | 
						||
};
 | 
						||
 | 
						||
TRecnotype TImporta_spese_recordset::new_rec(const char* buf)
 | 
						||
{
 | 
						||
  TToken_string str(256,'\t'); //nuovo record tab separator
 | 
						||
 | 
						||
  if(buf && *buf)
 | 
						||
  {
 | 
						||
    bool apici=false;
 | 
						||
 | 
						||
    for (const char* c = buf; *c ; c++)
 | 
						||
    {
 | 
						||
      if (*c == '"')
 | 
						||
      {
 | 
						||
        apici = !apici;
 | 
						||
      }
 | 
						||
      else
 | 
						||
      {
 | 
						||
        if (*c == ',')
 | 
						||
        {
 | 
						||
          if (!apici)
 | 
						||
            str << str.separator();
 | 
						||
          else
 | 
						||
            str << *c;
 | 
						||
        }
 | 
						||
        else
 | 
						||
          str << *c;
 | 
						||
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  const TRecnotype n = TText_recordset::new_rec(str);
 | 
						||
 | 
						||
  if (n >= 0)
 | 
						||
    row(n).separator(str.separator());
 | 
						||
  
 | 
						||
  return n;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
TImporta_spese_recordset::TImporta_spese_recordset(const char * fileName)
 | 
						||
                        : TCSV_recordset("CSV(,)")
 | 
						||
{
 | 
						||
	load_file(fileName);
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////
 | 
						||
// TSkeleton_application
 | 
						||
///////////////////////////////////////
 | 
						||
class TSpeseCSV : public TSkeleton_application
 | 
						||
{
 | 
						||
	virtual bool check_autorization() const {return false;}
 | 
						||
  virtual const char * extra_modules() const {return "ve";}
 | 
						||
 | 
						||
protected:
 | 
						||
  void chiudi_movimento(TConfig& configfile, TImporto& tot_doc, TDate& data);
 | 
						||
 | 
						||
public:           
 | 
						||
  virtual void main_loop();
 | 
						||
	bool transfer(const TMask& msk);
 | 
						||
 
 | 
						||
  TSpeseCSV() {};
 | 
						||
};
 | 
						||
 | 
						||
const char* const nomeini = "ps0713500ats.ini";  //non si conosce il perch<63>
 | 
						||
 | 
						||
void TSpeseCSV::chiudi_movimento(TConfig& configfile, TImporto& tot_doc, TDate& data)
 | 
						||
{
 | 
						||
  //aggiungo i campi che mancano in testata
 | 
						||
  configfile.set_paragraph("23");
 | 
						||
  configfile.set(MOV_DATAREG, data);
 | 
						||
  configfile.set(MOV_DATADOC, data);
 | 
						||
  configfile.set(MOV_DATACOMP, data);
 | 
						||
 | 
						||
	tot_doc.normalize();
 | 
						||
 | 
						||
  //aggiungo la prima riga che bilancia le righe successive
 | 
						||
	TString8 paragraph;
 | 
						||
  paragraph.format("%d,%d",LF_RMOV,1);
 | 
						||
	configfile.set_paragraph(paragraph);  
 | 
						||
	configfile.set(RMV_IMPORTO,tot_doc.valore().string());
 | 
						||
  configfile.set(RMV_SEZIONE,tot_doc.sezione());
 | 
						||
 | 
						||
  configfile.set_paragraph("Transaction");
 | 
						||
  
 | 
						||
  TString app;
 | 
						||
  app << "cg2 -0 -i" << nomeini; 
 | 
						||
  TExternal_app primanota(app);
 | 
						||
  primanota.run();
 | 
						||
}
 | 
						||
 | 
						||
bool TSpeseCSV::transfer(const TMask& msk)
 | 
						||
{
 | 
						||
  //genero il nome del file da caricare
 | 
						||
  TFilename name = msk.get(F_PATH);
 | 
						||
  name.add(msk.get(F_NAME));
 | 
						||
  TImporta_spese_recordset s(name);
 | 
						||
 | 
						||
  TProgind pi(s.items(),"Importazione spese in corso ...",true,true);
 | 
						||
 | 
						||
  xvt_fsys_removefile(nomeini);
 | 
						||
  TConfig configfile (nomeini, "Transaction");  //setto il paragrafo [Transaction] del file ini 
 | 
						||
 | 
						||
  TDate dataold, data;
 | 
						||
 | 
						||
  int nriga = 2;
 | 
						||
  TImporto tot_doc;
 | 
						||
 | 
						||
  const TRectype& causale = cache().get(LF_RCAUSALI, msk.get(F_CODCAU));
 | 
						||
 | 
						||
 | 
						||
  for (bool ok=s.move_first();ok;ok=s.move_next())
 | 
						||
  {
 | 
						||
    if (!pi.addstatus(1)) 
 | 
						||
      break;
 | 
						||
    
 | 
						||
    
 | 
						||
	  TString80 tmp;
 | 
						||
 | 
						||
    //importo
 | 
						||
	  tmp = s.get(2).as_string();
 | 
						||
 | 
						||
    //evito di analizzare eventuali righe vuote
 | 
						||
    if (tmp.blank())
 | 
						||
      continue;
 | 
						||
 | 
						||
    tmp.replace(',','.');
 | 
						||
    tmp.strip("\"");
 | 
						||
    const real imp = tmp;
 | 
						||
 | 
						||
    if (!imp.is_zero())
 | 
						||
    {
 | 
						||
      
 | 
						||
      //codice commessa
 | 
						||
	    tmp = s.get(0).as_string();
 | 
						||
      tmp.strip("\"");
 | 
						||
 | 
						||
      const TRectype& commessa = cache().get("CMS", tmp);
 | 
						||
 | 
						||
	    //data
 | 
						||
	    tmp = s.get(1).as_string();    
 | 
						||
      tmp.strip("\"");
 | 
						||
	    
 | 
						||
	    data.set_day(atoi(tmp.mid(0,2)));
 | 
						||
	    data.set_month(atoi(tmp.mid(3,2)));
 | 
						||
	    data.set_year(atoi(tmp.mid(6,4)));
 | 
						||
      
 | 
						||
      //descrizione
 | 
						||
	    tmp = s.get(3).as_string();    
 | 
						||
      tmp.strip("\"");
 | 
						||
 | 
						||
	    if(data != dataold)
 | 
						||
		  {
 | 
						||
        if (dataold.ok())
 | 
						||
          chiudi_movimento(configfile, tot_doc, data);
 | 
						||
 | 
						||
				TFilename filename(nomeini);
 | 
						||
				filename.fremove();
 | 
						||
 | 
						||
        configfile.set_paragraph("Transaction");
 | 
						||
        configfile.set("Action","INSERT");
 | 
						||
        configfile.set("Mode","AUTO");
 | 
						||
        
 | 
						||
        configfile.set_paragraph("23"); //setto il paragrafo [23] del file ini (testata)
 | 
						||
        configfile.set(MOV_CODCAUS, causale.get(RCA_CODCAUS));
 | 
						||
  
 | 
						||
        configfile.set_paragraph("24,1");
 | 
						||
        configfile.set(RMV_NUMRIG,1);
 | 
						||
        configfile.set(RMV_GRUPPO, causale.get(RCA_GRUPPO));
 | 
						||
        configfile.set(RMV_CONTO, causale.get(RCA_CONTO));
 | 
						||
        configfile.set(RMV_SOTTOCONTO, causale.get(RCA_SOTTOCONTO));
 | 
						||
 | 
						||
			  tot_doc.reset();
 | 
						||
        nriga = 2;
 | 
						||
        dataold = data;
 | 
						||
      }
 | 
						||
 | 
						||
	    TImporto importo('D', imp);
 | 
						||
	    importo.normalize();
 | 
						||
      tot_doc -= importo;
 | 
						||
		  
 | 
						||
	    TString8 paragraph;
 | 
						||
      paragraph.format("%d,%d",LF_RMOV,nriga++);
 | 
						||
      configfile.set_paragraph(paragraph);
 | 
						||
 | 
						||
      configfile.set(RMV_IMPORTO,importo.valore().string());
 | 
						||
      configfile.set(RMV_SEZIONE,importo.sezione());
 | 
						||
      configfile.set(RMV_CODCMS,commessa.get("CODTAB"));
 | 
						||
      configfile.set(RMV_DATAREG,data);
 | 
						||
      configfile.set(RMV_GRUPPO,commessa.get("I1"));
 | 
						||
      configfile.set(RMV_CONTO,commessa.get("I2"));
 | 
						||
      configfile.set(RMV_SOTTOCONTO,commessa.get("I3"));
 | 
						||
    }
 | 
						||
 | 
						||
  }
 | 
						||
 | 
						||
  chiudi_movimento(configfile, tot_doc, data);
 | 
						||
    
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
void TSpeseCSV::main_loop()
 | 
						||
{
 | 
						||
  TImportaSpese_mask msk;
 | 
						||
	
 | 
						||
  if (msk.run() == K_ENTER)
 | 
						||
  {		
 | 
						||
		if (transfer(msk))
 | 
						||
		{
 | 
						||
      message_box(TR("Importazione spese completata"));
 | 
						||
      xvt_fsys_removefile(nomeini);
 | 
						||
		}
 | 
						||
  }   
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
TSpeseCSV& app() { return (TSpeseCSV&) main_app(); }
 | 
						||
 | 
						||
 | 
						||
int ps0713500 (int argc, char* argv[])
 | 
						||
{
 | 
						||
  TSpeseCSV main_app;
 | 
						||
  main_app.run(argc, argv, TR("Importazione Spese"));
 | 
						||
  return true;
 | 
						||
} |