Files correlati : lv3 Ricompilazione Demo : [ ] Commento : Corretta la query di selezione dei contratti git-svn-id: svn://10.65.10.50/trunk@20645 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			270 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <defmask.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <textset.h>
 | 
						|
 | 
						|
#include "../ve/velib.h"
 | 
						|
 | 
						|
#include "lvcondv.h"
 | 
						|
#include "lvrcondv.h"
 | 
						|
 | 
						|
#include  "lv3600a.h"
 | 
						|
 | 
						|
                                 ///////////////////////////
 | 
						|
                                 ////    TINVCON_REC    ////
 | 
						|
                                 ///////////////////////////
 | 
						|
 | 
						|
//classe TInvcon_rec
 | 
						|
class TInvcon_rec: public TAS400_recordset
 | 
						|
{
 | 
						|
  TString4 _umkg;  // Unità di misura dei Kg 
 | 
						|
  TString4 _umgr;  // Unità di misura dei gr 
 | 
						|
 | 
						|
private:
 | 
						|
  long peso_in_grammi(const TArticolo& art) const;  
 | 
						|
 | 
						|
public:  
 | 
						|
  void aggiungi_riga(const long codcf, const TString& codart);
 | 
						|
  TInvcon_rec();
 | 
						|
};
 | 
						|
 | 
						|
//peso_in_grammi: metodo che converte il peso di un articolo in grammi
 | 
						|
long TInvcon_rec::peso_in_grammi(const TArticolo& art) const
 | 
						|
{
 | 
						|
  const TString4 ump  = art.get(ANAMAG_UMP);
 | 
						|
	const real     peso = art.get_real(ANAMAG_PESO);
 | 
						|
  if (ump == _umgr)
 | 
						|
    return peso.integer();
 | 
						|
 | 
						|
  real peso_gr = ZERO;
 | 
						|
	if (ump.full() && !peso.is_zero())
 | 
						|
  {
 | 
						|
    peso_gr = ((TArticolo&)art).convert_to_um(peso, _umkg, ump, false); // Converto in Kg
 | 
						|
    peso_gr *= 1000.0;                                                  // Converto in gr    
 | 
						|
    peso_gr.round();                                                    // Arrotondo al grammo 
 | 
						|
  }
 | 
						|
 | 
						|
  return peso_gr.integer();
 | 
						|
}
 | 
						|
 | 
						|
//metodo per aggiungere righe al recordset da stampare
 | 
						|
void TInvcon_rec::aggiungi_riga(const long codcf, const TString& codart)
 | 
						|
{
 | 
						|
  //preparo la cache sul clifo
 | 
						|
  TToken_string clifokey;
 | 
						|
  clifokey.add('C'); 
 | 
						|
  clifokey.add(codcf);
 | 
						|
  const TRectype& clifo = cache().get(LF_CLIFO, clifokey);
 | 
						|
  
 | 
						|
  //recupero i dati di interesse da clifo
 | 
						|
  TString80 ragsoc1  = clifo.get(CLI_RAGSOC).left(30);
 | 
						|
  TString80 ragsoc2  = clifo.get(CLI_RAGSOC).mid(30);
 | 
						|
  //leggo il comune
 | 
						|
  TString80 citta;
 | 
						|
  TToken_string comunikey;
 | 
						|
  comunikey.add("");
 | 
						|
  comunikey.add(clifo.get(CLI_COMCF));
 | 
						|
  if(clifo.get(CLI_LOCCF).full())
 | 
						|
    citta << clifo.get(CLI_LOCCF) << ' ';
 | 
						|
  citta << cache().get(LF_COMUNI, comunikey).get("DENCOM");
 | 
						|
  citta.cut(39);
 | 
						|
 | 
						|
  //preparo la cache su anamag 
 | 
						|
  const TArticolo& anamag = cached_article(codart);
 | 
						|
 | 
						|
  //recupero i dati di interesse da anamag  
 | 
						|
  TString80 desart = anamag.get(ANAMAG_DESCR);
 | 
						|
  long      peso   = peso_in_grammi(anamag);
 | 
						|
  long      lavco1 = anamag.get_int(ANAMAG_CODLAV1);
 | 
						|
  long      lavco2 = anamag.get_int(ANAMAG_CODLAV2);
 | 
						|
  long      linde1 = anamag.get_int(ANAMAG_LINDEST1);
 | 
						|
  long      linde2 = anamag.get_int(ANAMAG_LINDEST2);
 | 
						|
  long      lavatr = anamag.get_int(ANAMAG_LAVATRICE);
 | 
						|
  long      codla1 = atoi(anamag.get(ANAMAG_ARTLAVCONT).left(2));
 | 
						|
  long      codla2 = 0;  //non serve
 | 
						|
  long      mangan = anamag.get_int(ANAMAG_MANGDEST);
 | 
						|
  long      ppconf = anamag.get_int(ANAMAG_PPCONF);
 | 
						|
 | 
						|
  //creo fisicamente la nuova riga
 | 
						|
  new_rec("");
 | 
						|
  set("CODCF",     (TVariant)codcf);
 | 
						|
  set("RAGSOC1",   ragsoc1);
 | 
						|
  set("RAGSOC2",   ragsoc2);
 | 
						|
  set("CITTA",     citta);
 | 
						|
  set("CODART",    codart);
 | 
						|
  set("DESART",    desart);
 | 
						|
  set("PESO_GR",   (TVariant)peso);
 | 
						|
  set("LAVCON1",   (TVariant)lavco1);
 | 
						|
  set("LAVCON2",   (TVariant)lavco2);
 | 
						|
  set("LINDES1",   (TVariant)linde1);
 | 
						|
  set("LINDES2",   (TVariant)linde2);
 | 
						|
  set("LAVATR",    (TVariant)lavatr);
 | 
						|
  set("CODARTLAV", (TVariant)codla1);
 | 
						|
  //set("CODCLILAV", (TVariant)codla2);
 | 
						|
  set("MANGANO",   (TVariant)mangan);
 | 
						|
  set("CONF",      (TVariant)ppconf);  
 | 
						|
}
 | 
						|
 | 
						|
TInvcon_rec::TInvcon_rec()
 | 
						|
            :TAS400_recordset("AS400(186)")
 | 
						|
{
 | 
						|
  create_field("FILLER1",   -1,   1,  _alfafld,     false); //riempimento
 | 
						|
  create_field("CODCF",     -1,   6,  _longzerofld, true);  //codice cliente
 | 
						|
  create_field("RAGSOC1",   -1,  30,  _alfafld,     true);  //ragione sociale 1
 | 
						|
  create_field("RAGSOC2",   -1,  30,  _alfafld,     true);  //ragione sociale 2
 | 
						|
  create_field("CITTA",     -1,  40,  _alfafld,     true);  //città (località + comune)
 | 
						|
  create_field("FILLER2",   -1,   2,  _alfafld,     false); //riempimento
 | 
						|
  create_field("CODART",    -1,   8,  _alfafld,     true);  //codice articolo
 | 
						|
  create_field("DESART",    -1,  30,  _alfafld,     true);  //descrizione articolo
 | 
						|
  create_field("FILLER3",   -1,   9,  _alfafld,     false); //riempimento
 | 
						|
  create_field("PESO_GR",   -1,   6,  _longzerofld,  true); //peso in grammi
 | 
						|
  create_field("LAVCON1",   -1,   2,  _intzerofld,  true);  //lavacontinua 1
 | 
						|
  create_field("LAVCON2",   -1,   2,  _intzerofld,  false); //lavacontinua 2
 | 
						|
  create_field("LINDES1",   -1,   2,  _intzerofld,  true);  //linea di destinazione 1
 | 
						|
  create_field("LINDES2",   -1,   2,  _intzerofld,  true);  //linea di destinazione 2
 | 
						|
  create_field("LAVATR",    -1,   2,  _intzerofld,  true);  //lavatrice
 | 
						|
  create_field("CODARTLAV", -1,   3,  _intzerofld,  true);  //codice lavaggio 1
 | 
						|
  create_field("CODCLILAV", -1,   3,  _intzerofld,  true);  //codice lavaggio 2
 | 
						|
  create_field("MANGANO",   -1,   3,  _intzerofld,  true);  //mangano
 | 
						|
  create_field("CONF",      -1,   3,  _intzerofld,  true);  //numero di pezzi per confezione
 | 
						|
  create_field("ACAPO",     -1,   2,  _alfafld,     true, TVariant("\r\n"));  //caratteri di a capo
 | 
						|
 | 
						|
  _umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg", "KG");
 | 
						|
  TISAM_recordset ums("USE %UMS SELECT (NUM(S7==#KG))&&(STR(R10==0.001))");
 | 
						|
  ums.set_var("#KG", _umkg);
 | 
						|
  if (ums.move_first())
 | 
						|
    _umgr = ums.get("CODTAB").as_string();
 | 
						|
  else
 | 
						|
    _umgr = _umkg == "KG" ? "GR" : "";
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
                                 ///////////////////////////
 | 
						|
                                 ////    TINVCON_MSK    ////
 | 
						|
                                 ///////////////////////////
 | 
						|
 | 
						|
//classe TInvcon_msk
 | 
						|
class TInvcon_msk: public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
 | 
						|
public:
 | 
						|
  void esporta() const;
 | 
						|
  TInvcon_msk();
 | 
						|
};
 | 
						|
 | 
						|
//ESPORTA: metodo che crea il file di output nel percorso desiderato
 | 
						|
void TInvcon_msk::esporta() const
 | 
						|
{
 | 
						|
  //recupero i dati di interesse dalla maschera
 | 
						|
  const TDate datasc = get_date(F_SCAD);
 | 
						|
 | 
						|
  //prendo il path dalla maschera
 | 
						|
  const TString& path = get(F_PATH);
 | 
						|
  const TString& fname = get(F_FILE);
 | 
						|
  TFilename file = path;
 | 
						|
  file.add(fname);
 | 
						|
 | 
						|
  //preparo il recodset che contiene tutti i contratti validi
 | 
						|
  TString query1;
 | 
						|
  query1 << "USE LVCONDV\n"
 | 
						|
	     << "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))\n"
 | 
						|
		 << "BY CODCF";
 | 
						|
 | 
						|
  TISAM_recordset contratti(query1);
 | 
						|
  contratti.set_var("#DATA", datasc);
 | 
						|
 | 
						|
  if(contratti.items() > 0)
 | 
						|
  {
 | 
						|
    TInvcon_rec* recset = new TInvcon_rec();
 | 
						|
 | 
						|
    TAssoc_array presenti;
 | 
						|
    
 | 
						|
    contratti.move_first();
 | 
						|
    long oldcodcf = contratti.get(LVCONDV_CODCF).as_int();
 | 
						|
 | 
						|
    TProgind pi(contratti.items(), "Esportazione in corso...", true, true);
 | 
						|
 | 
						|
    for(bool ok1 = contratti.move_first(); ok1; ok1 = contratti.move_next())
 | 
						|
    {
 | 
						|
      if (!pi.addstatus(1))
 | 
						|
			  break;
 | 
						|
 | 
						|
      const long codcf  = contratti.get(LVCONDV_CODCF).as_int();
 | 
						|
	  const long codcon = contratti.get(LVCONDV_CODCONT).as_int();
 | 
						|
 | 
						|
      if(oldcodcf != codcf)
 | 
						|
      {
 | 
						|
        presenti.destroy();
 | 
						|
        oldcodcf = codcf;
 | 
						|
      }
 | 
						|
 | 
						|
      //preparo il recordset che contiene le righe del contratto in essere
 | 
						|
      TString query2;
 | 
						|
      query2 << "USE LVRCONDV\n"
 | 
						|
             << "BY CODART\n"
 | 
						|
             << "FROM CODCF=" << codcf << " CODCONT=" << codcon << "\n"
 | 
						|
             << "TO CODCF="   << codcf << " CODCONT=" << codcon << "\n";
 | 
						|
 | 
						|
      TISAM_recordset righe(query2);
 | 
						|
 | 
						|
      for(bool ok2 = righe.move_first(); ok2; ok2 = righe.move_next())
 | 
						|
      {
 | 
						|
        TString80 codart = righe.get(LVRCONDV_CODART).as_string();  codart.cut(7);
 | 
						|
        
 | 
						|
        TToken_string key;
 | 
						|
        key.add(codcf);
 | 
						|
        key.add(codart);
 | 
						|
 | 
						|
        if(!presenti.is_key(key))
 | 
						|
        {
 | 
						|
          presenti.add(key, key);        
 | 
						|
          recset->aggiungi_riga(codcf, codart);
 | 
						|
        }
 | 
						|
      }      
 | 
						|
    }
 | 
						|
    recset->save_as(file);
 | 
						|
    message_box(TR("Esportazione terminata"));
 | 
						|
  }
 | 
						|
  else
 | 
						|
    warning_box(TR("Non ci sono contratti in essere rispetto alla data specificata"));
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
//ON_FIELD_EVENT: metodo che gestisce gli eventi sui campi della maschera
 | 
						|
bool TInvcon_msk::on_field_event(TOperable_field& f, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
//metodo costruttore che precarica i campi di interesse sulla maschera
 | 
						|
TInvcon_msk::TInvcon_msk() : TAutomask("lv3600a") {}
 | 
						|
 | 
						|
                                 ///////////////////////////
 | 
						|
                                 ////    TINVCON_APP    ////
 | 
						|
                                 ///////////////////////////
 | 
						|
 | 
						|
//classe TInvcon_app
 | 
						|
class TInvcon_app : public TSkeleton_application
 | 
						|
{
 | 
						|
public:
 | 
						|
  virtual void main_loop();  
 | 
						|
};
 | 
						|
 | 
						|
void TInvcon_app::main_loop()
 | 
						|
{
 | 
						|
  TInvcon_msk msk; 
 | 
						|
  while (msk.run() != K_QUIT)
 | 
						|
	  msk.esporta();
 | 
						|
}
 | 
						|
 | 
						|
int lv3600(int argc, char *argv[])
 | 
						|
{
 | 
						|
  TInvcon_app a;
 | 
						|
  a.run (argc, argv, TR("Invio a contapezzi"));
 | 
						|
  return TRUE;
 | 
						|
}
 |