Files correlati : si0.exe Ricompilazione Demo : [ ] Commento : Aggiunta gestione del codice IVA diverso per gli articoli che iniziano con Z (detto da Roberto) git-svn-id: svn://10.65.10.50/trunk@10077 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			410 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			410 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <filetext.h>
 | 
						|
#include <form.h>
 | 
						|
#include <mask.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <printer.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <utility.h>         
 | 
						|
#include <lffiles.h>         
 | 
						|
 | 
						|
#include "..\ve\velib.h"
 | 
						|
#include "si0100a.h"
 | 
						|
 | 
						|
/////////////////////////////////////////////////////
 | 
						|
// Classe TPag_file customizzata dalla TFile_text //
 | 
						|
/////////////////////////////////////////////////////
 | 
						|
class TPag_file: public TFile_text
 | 
						|
{ 
 | 
						|
protected:
 | 
						|
  virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
 | 
						|
 | 
						|
public:
 | 
						|
  TPag_file(const TString& file_name, const TString& config_name);
 | 
						|
  virtual ~TPag_file() { }
 | 
						|
};
 | 
						|
 | 
						|
// gestione dei messaggi estesi nei campi
 | 
						|
void TPag_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
 | 
						|
{
 | 
						|
  const TString code(s.get(0));
 | 
						|
  TString valore;
 | 
						|
  str = valore;
 | 
						|
}
 | 
						|
 | 
						|
TPag_file::TPag_file(const TString& file_name, const TString& config_name)
 | 
						|
          : TFile_text(file_name, config_name)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////
 | 
						|
// Classe TCli_file customizzata dalla TFile_text //
 | 
						|
/////////////////////////////////////////////////////
 | 
						|
class TCli_file: public TFile_text
 | 
						|
{ 
 | 
						|
protected:
 | 
						|
  virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
 | 
						|
 | 
						|
public:
 | 
						|
  TCli_file(const TString& file_name, const TString& config_name);
 | 
						|
  virtual ~TCli_file() { }
 | 
						|
};
 | 
						|
 | 
						|
// gestione dei messaggi estesi nei campi
 | 
						|
void TCli_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
 | 
						|
{
 | 
						|
  const TString code(s.get(0));
 | 
						|
  TString valore;
 | 
						|
  str = valore;
 | 
						|
}
 | 
						|
 | 
						|
TCli_file::TCli_file(const TString& file_name, const TString& config_name)
 | 
						|
          : TFile_text(file_name, config_name)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////
 | 
						|
// Classe TArt_file customizzata dalla TFile_text //
 | 
						|
/////////////////////////////////////////////////////
 | 
						|
class TArt_file: public TFile_text
 | 
						|
{ 
 | 
						|
protected:
 | 
						|
  virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
 | 
						|
 | 
						|
public:
 | 
						|
  TArt_file(const TString& file_name, const TString& config_name);
 | 
						|
  virtual ~TArt_file() { }
 | 
						|
};
 | 
						|
 | 
						|
// gestione dei messaggi estesi nei campi
 | 
						|
void TArt_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
 | 
						|
{
 | 
						|
  const TString code(s.get(0));
 | 
						|
  TString valore;
 | 
						|
  str = valore;
 | 
						|
}
 | 
						|
 | 
						|
TArt_file::TArt_file(const TString& file_name, const TString& config_name)
 | 
						|
          : TFile_text(file_name, config_name)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
class TImport: public TSkeleton_application
 | 
						|
{
 | 
						|
  
 | 
						|
protected:
 | 
						|
  virtual bool create(void);
 | 
						|
  virtual void main_loop();
 | 
						|
  virtual bool destroy(void) ;
 | 
						|
  void transfer(void);
 | 
						|
  bool check_seq(TConfig & c);
 | 
						|
  bool localita2comune(const TString & cap, const TString & localita, TString & codice);
 | 
						|
  void update_cli(TCli_file & in, TRecord_text & r, TLocalisamfile & cli);
 | 
						|
  void update_art(TArt_file & in, TRecord_text & r, TLocalisamfile & art, TLocalisamfile & umart);
 | 
						|
  void update_doc(TPag_file & in, TRecord_text & r, TDocumento &doc, const char * codnum, const char * tipodoc,
 | 
						|
                  const char * tiporiga, const char * codiva, const char * codivaz);
 | 
						|
  virtual const char * extra_modules() const { return "BA"; }
 | 
						|
 | 
						|
public:
 | 
						|
  TImport() {}
 | 
						|
  virtual ~TImport() {}
 | 
						|
};
 | 
						|
 | 
						|
// restituisce un riferimento all' applicazione
 | 
						|
inline TImport& app() { return (TImport&) main_app();}
 | 
						|
 | 
						|
// creazione dell'applicazione
 | 
						|
bool TImport::create()
 | 
						|
{                         
 | 
						|
  open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, 
 | 
						|
             LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON,
 | 
						|
             LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
 | 
						|
 | 
						|
  return TSkeleton_application::create();
 | 
						|
}
 | 
						|
 | 
						|
// distruzione dell'applicazione
 | 
						|
bool TImport::destroy()
 | 
						|
{
 | 
						|
  return TSkeleton_application::destroy();
 | 
						|
}
 | 
						|
 | 
						|
// carica la maschera 
 | 
						|
void TImport::main_loop()
 | 
						|
{ 
 | 
						|
  transfer();
 | 
						|
}
 | 
						|
 | 
						|
// trasferimento dati su file per ct bo
 | 
						|
void TImport::transfer()
 | 
						|
{  
 | 
						|
  TMask msk("si0100a");
 | 
						|
  TConfig c(CONFIG_STUDIO, "sipag");
 | 
						|
  msk.set(F_FILESEQ, c.get("FileSeq"));
 | 
						|
  msk.set(F_FILEPAG, c.get("FilePag"));
 | 
						|
  msk.set(F_FILECLI, c.get("FileCli"));
 | 
						|
  msk.set(F_FILEART, c.get("FileArt"));
 | 
						|
  
 | 
						|
  while (msk.run() != K_QUIT)
 | 
						|
  {
 | 
						|
    c.set("FileSeq", msk.get(F_FILESEQ));
 | 
						|
    c.set("FilePag", msk.get(F_FILEPAG));
 | 
						|
    c.set("FileCli", msk.get(F_FILECLI));
 | 
						|
    c.set("FileArt", msk.get(F_FILEART));
 | 
						|
  
 | 
						|
    if (check_seq(c)) 
 | 
						|
    {       
 | 
						|
      TRecord_text rec;
 | 
						|
      TProgind p(3L, "Trasferimento da AS/400");
 | 
						|
      TFilename clisrc(msk.get(F_FILECLI));
 | 
						|
 | 
						|
      if (clisrc.exist())
 | 
						|
      {
 | 
						|
        TCli_file clifile(clisrc, "cli.ini");
 | 
						|
        TLocalisamfile clienti(LF_CLIFO);
 | 
						|
        
 | 
						|
        clifile.open(clisrc,'r');  
 | 
						|
        while (clifile.read(rec) == NOERR)
 | 
						|
          update_cli(clifile, rec, clienti);
 | 
						|
        clifile.close();
 | 
						|
      }
 | 
						|
      p.addstatus(1L);
 | 
						|
      
 | 
						|
      TFilename artsrc(msk.get(F_FILEART));
 | 
						|
 | 
						|
      if (artsrc.exist())
 | 
						|
      {
 | 
						|
        TArt_file artfile(artsrc, "art.ini");
 | 
						|
        TLocalisamfile articoli(LF_ANAMAG);
 | 
						|
        TLocalisamfile umart(LF_UMART);
 | 
						|
        
 | 
						|
        artfile.open(artsrc,'r');
 | 
						|
        while (artfile.read(rec) == NOERR)
 | 
						|
          update_art(artfile, rec, articoli, umart);
 | 
						|
        artfile.close();
 | 
						|
      }
 | 
						|
      p.addstatus(1L);
 | 
						|
      
 | 
						|
      TFilename pagsrc(msk.get(F_FILEPAG));
 | 
						|
      
 | 
						|
      if (pagsrc.exist())
 | 
						|
      {
 | 
						|
        TPag_file pagfile(pagsrc, "pag.ini");
 | 
						|
        TDocumento doc;
 | 
						|
        TString codnum(c.get("CodNum"));
 | 
						|
        TString tipodoc(c.get("TipoDoc"));
 | 
						|
        TString tiporiga(c.get("TipoRiga"));                
 | 
						|
        TString codiva(c.get("CodIva"));                
 | 
						|
        TString codivaz(c.get("CodIvaZ"));                
 | 
						|
        
 | 
						|
        
 | 
						|
        pagfile.open(pagsrc,'r');
 | 
						|
        while (pagfile.read(rec) == NOERR)
 | 
						|
          update_doc(pagfile, rec, doc, codnum, tipodoc, tiporiga, codiva, codivaz);
 | 
						|
        pagfile.close();              
 | 
						|
      }
 | 
						|
      p.addstatus(1L);
 | 
						|
      
 | 
						|
      message_box("Operazione terminata");
 | 
						|
    }           
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
//inizializza il cursore
 | 
						|
bool TImport::check_seq(TConfig & c)
 | 
						|
{            
 | 
						|
  TScanner seq(c.get("FileSeq")); 
 | 
						|
  const int expected_seq = c.get_int("Seq") + 1;
 | 
						|
  const int seqnum = seq.integer();
 | 
						|
  
 | 
						|
  if (expected_seq != seqnum)
 | 
						|
    return error_box("Il numero di sequenza trovato %d\nnon coincide con quello atteso %d", seqnum, expected_seq);
 | 
						|
  c.set("Seq", seqnum);
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int si0100(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TImport a ;
 | 
						|
  a.run(argc, argv, "Ricezione da AS/400");
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
  
 | 
						|
bool TImport::localita2comune(const TString & caporig, const TString & localita, TString & codice)
 | 
						|
{             
 | 
						|
  TLocalisamfile comuni (LF_COMUNI);                 
 | 
						|
  TString cap(caporig);
 | 
						|
  bool found = FALSE;
 | 
						|
 | 
						|
  if (cap.mid(2,1) == "1")
 | 
						|
  {
 | 
						|
    cap = cap.left(3);
 | 
						|
    cap << "00";
 | 
						|
  }
 | 
						|
  
 | 
						|
  comuni.setkey(3);
 | 
						|
  comuni.zero();
 | 
						|
  comuni.put("CAPCOM", cap);
 | 
						|
  
 | 
						|
  TRectype com (comuni.curr());  
 | 
						|
  codice = "";
 | 
						|
  
 | 
						|
  for (comuni.read(_isgteq); !comuni.eof() && !found; comuni.next())
 | 
						|
  {
 | 
						|
    if (comuni.curr() != com)
 | 
						|
      break;
 | 
						|
    
 | 
						|
    found = localita.compare(comuni.get("DENCOM"), 3, FALSE) == 0;
 | 
						|
    if (found)
 | 
						|
      codice = comuni.get("COM");
 | 
						|
  } 
 | 
						|
  return found;
 | 
						|
}
 | 
						|
 | 
						|
void TImport::update_cli(TCli_file & in, TRecord_text & r, TLocalisamfile & cli)
 | 
						|
{                  
 | 
						|
  cli.zero();
 | 
						|
  cli.put("TIPOCF", "C");
 | 
						|
  cli.put("CODCF", in.get_field(r, 1));
 | 
						|
  bool newrec = cli.read() != NOERR;
 | 
						|
  if (newrec)
 | 
						|
  {
 | 
						|
    cli.zero();
 | 
						|
    cli.put("TIPOCF", "C");
 | 
						|
    cli.put("CODCF", in.get_field(r, 1));
 | 
						|
  }               
 | 
						|
  
 | 
						|
  cli.put("RAGSOC", in.get_field(r, 2));
 | 
						|
  TString ind(in.get_field(r, 3));
 | 
						|
  TString loc;
 | 
						|
  
 | 
						|
  int p = ind.find('-');
 | 
						|
  if (p > 0)
 | 
						|
  {
 | 
						|
    loc = ind.mid(p+1);
 | 
						|
    loc.strip("-");
 | 
						|
    loc.trim();
 | 
						|
    ind.cut(p);
 | 
						|
    ind.trim();
 | 
						|
  }
 | 
						|
  
 | 
						|
  p = ind.rfind(',');
 | 
						|
  if (p > 0)
 | 
						|
  {                    
 | 
						|
    cli.put("INDCF", ind.left(p));
 | 
						|
    cli.put("CIVCF", ind.mid(p+1));
 | 
						|
  }
 | 
						|
  else
 | 
						|
    cli.put("INDCF", ind.left(35));
 | 
						|
  
 | 
						|
  TString cap(in.get_field(r, 4));
 | 
						|
  
 | 
						|
  cli.put("CAPCF", cap);
 | 
						|
  cli.put("COFI", in.get_field(r, 6));
 | 
						|
  cli.put("PAIV", in.get_field(r, 7));
 | 
						|
  
 | 
						|
  TString localita(in.get_field(r, 8));    
 | 
						|
  TString codice;
 | 
						|
  
 | 
						|
  if (localita2comune(cap, localita, codice) == TRUE)
 | 
						|
    localita = "";    
 | 
						|
 | 
						|
  if (loc.not_empty())
 | 
						|
  {
 | 
						|
    localita.insert(" ");
 | 
						|
    localita.insert(loc);
 | 
						|
  }
 | 
						|
  cli.put("COMCF", codice);
 | 
						|
  cli.put("LOCALITACF", localita);
 | 
						|
  
 | 
						|
  if (newrec)
 | 
						|
    cli.write();
 | 
						|
  else
 | 
						|
    cli.rewrite();
 | 
						|
}
 | 
						|
 | 
						|
void TImport::update_art(TArt_file & in, TRecord_text & r, TLocalisamfile & art, TLocalisamfile & umart)
 | 
						|
{
 | 
						|
  art.zero();
 | 
						|
  art.put("CODART", in.get_field(r, 0));
 | 
						|
  bool newrec = art.read() != NOERR;
 | 
						|
  if (newrec)
 | 
						|
  {
 | 
						|
    art.zero();
 | 
						|
    art.put("CODART", in.get_field(r, 0));
 | 
						|
  }               
 | 
						|
  
 | 
						|
  art.put("DESCR", in.get_field(r, 1));
 | 
						|
  
 | 
						|
  if (newrec)
 | 
						|
  {
 | 
						|
    art.write();
 | 
						|
    umart.zero();
 | 
						|
    umart.put("CODART", in.get_field(r, 0));
 | 
						|
    umart.put("NRIGA", "1");
 | 
						|
    umart.put("UM", "N.");
 | 
						|
    umart.put("FC", "1.00");
 | 
						|
    umart.write();
 | 
						|
  }  
 | 
						|
  else
 | 
						|
    art.rewrite();
 | 
						|
}
 | 
						|
 | 
						|
void TImport::update_doc(TPag_file & in, TRecord_text & r, TDocumento &doc, const char * codnum, const char * tipodoc,
 | 
						|
                         const char * tiporiga, const char * codiva, const char * codivaz)
 | 
						|
{                                        
 | 
						|
  doc.zero();
 | 
						|
  const bool newdoc = doc.read('D', TDate(TODAY).year(), codnum, atol(in.get_field(r, 1))) != NOERR;
 | 
						|
  const TDate oggi(TODAY);
 | 
						|
  
 | 
						|
  if (newdoc)
 | 
						|
  {
 | 
						|
    doc.zero();
 | 
						|
    
 | 
						|
    TDocumento::set_key(doc, 'D', oggi.year(), codnum, atol(in.get_field(r, 1)));
 | 
						|
    doc.set_tipo(tipodoc);      
 | 
						|
    doc.put("TIPOCF", "C");
 | 
						|
    doc.put("CODCF", in.get_field(r, 1));
 | 
						|
    doc.put("DATADOC", oggi);
 | 
						|
    doc.put("DATACONS", oggi);
 | 
						|
  }
 | 
						|
                  
 | 
						|
  TRiga_documento & riga = doc.new_row(tiporiga);
 | 
						|
  
 | 
						|
  const TString & cod = in.get_field(r, 2);
 | 
						|
  riga.put("CODART", cod);
 | 
						|
  riga.put("CODARTMAG", cod);
 | 
						|
 | 
						|
  TString descr = cache().get(LF_ANAMAG, cod, "DESCR");
 | 
						|
 | 
						|
  riga.put("DESCR", descr); 
 | 
						|
  riga.put("CHECKED", "X"); 
 | 
						|
  doc.put("DATACONS", oggi);
 | 
						|
  
 | 
						|
     
 | 
						|
  real qta(in.get_field(r, 3)); 
 | 
						|
  
 | 
						|
  if (qta == ZERO)
 | 
						|
    qta = 1.00;
 | 
						|
 | 
						|
  riga.put("UMQTA", "N."); 
 | 
						|
  riga.put("QTA", qta); 
 | 
						|
 
 | 
						|
  TString prezzo_str(in.get_field(r, 4));
 | 
						|
  prezzo_str.replace(',', '.');
 | 
						|
  
 | 
						|
  const real prezzo(prezzo_str);
 | 
						|
  riga.put("PREZZO", prezzo); 
 | 
						|
  if (cod[0] == 'Z')
 | 
						|
  	riga.put("CODIVA", codivaz); 
 | 
						|
  else
 | 
						|
  	riga.put("CODIVA", codiva); 
 | 
						|
                    
 | 
						|
  if (newdoc)
 | 
						|
    doc.write();
 | 
						|
  else
 | 
						|
    doc.rewrite();
 | 
						|
}
 |