2011-02-23 11:28:24 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <automask.h>
|
|
|
|
|
#include <defmask.h>
|
|
|
|
|
#include <progind.h>
|
|
|
|
|
#include <textset.h>
|
|
|
|
|
|
|
|
|
|
#include "../ve/velib.h"
|
|
|
|
|
|
|
|
|
|
#include "comuni.h"
|
|
|
|
|
#include "../mg/anamag.h"
|
|
|
|
|
#include "lvcondv.h"
|
|
|
|
|
#include "lvrcondv.h"
|
|
|
|
|
|
|
|
|
|
#include "lv3800a.h"
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////
|
|
|
|
|
//// TINVIA_CLIENTI_SKEMA ////
|
|
|
|
|
////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TInvia_clienti_skema
|
|
|
|
|
class TInvia_clienti_skema: public TAS400_recordset
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
void aggiungi_riga(const long codcf);
|
|
|
|
|
TInvia_clienti_skema();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TInvia_clienti_skema::aggiungi_riga(const long codcf)
|
|
|
|
|
{
|
|
|
|
|
//preparo la cache su clifo
|
|
|
|
|
TToken_string clifokey;
|
|
|
|
|
clifokey.add('C');
|
|
|
|
|
clifokey.add(codcf);
|
|
|
|
|
const TRectype& clifo = cache().get(LF_CLIFO, clifokey);
|
|
|
|
|
|
|
|
|
|
const TString80 ragsoc = clifo.get(CLI_RAGSOC);
|
|
|
|
|
|
|
|
|
|
TString80 localita = clifo.get(CLI_LOCCF);
|
|
|
|
|
if(localita.empty())
|
|
|
|
|
{
|
|
|
|
|
TToken_string comunikey;
|
|
|
|
|
comunikey.add("");
|
|
|
|
|
comunikey.add(cap2comune(clifo.get(CLI_CAPCF), localita));
|
|
|
|
|
localita = cache().get(LF_COMUNI, comunikey, COM_DENCOM);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
new_rec("");
|
2011-11-22 16:17:42 +00:00
|
|
|
|
|
|
|
|
|
TString16 cod;
|
|
|
|
|
|
|
|
|
|
cod.format("%06d", codcf);
|
|
|
|
|
|
|
|
|
|
set("CODCF", cod);
|
2011-02-23 11:28:24 +00:00
|
|
|
|
set("RAGSOC", ragsoc);
|
|
|
|
|
set("CITTA", localita);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TInvia_clienti_skema::TInvia_clienti_skema()
|
|
|
|
|
: TAS400_recordset("AS400(122)")
|
|
|
|
|
{
|
2011-11-22 16:17:42 +00:00
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
FILE CLIENTI.TXT
|
|
|
|
|
|
|
|
|
|
Campo Tipo Posizione
|
|
|
|
|
-------------------------------------------
|
|
|
|
|
Codice Cliente Alfanumerico 1-20
|
|
|
|
|
Ragione Sociale Alfanumerico 21-70
|
|
|
|
|
Citta Alfanumerico 71-120
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
create_field("CODCF", -1, 20, _alfafld, true); //codice cliente
|
2011-02-23 11:28:24 +00:00
|
|
|
|
create_field("RAGSOC", -1, 50, _alfafld, true); //ragione sociale
|
|
|
|
|
create_field("CITTA", -1, 50, _alfafld, true); //citt<74>
|
2011-07-22 15:01:05 +00:00
|
|
|
|
create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo
|
2011-02-23 11:28:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////
|
|
|
|
|
//// TINVIA_ARTICOLI_SKEMA ////
|
|
|
|
|
/////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TInvia_articoli_skema
|
|
|
|
|
class TInvia_articoli_skema: public TAS400_recordset
|
|
|
|
|
{
|
2011-11-22 16:17:42 +00:00
|
|
|
|
TString4 _umkg; // Unit<69> di misura dei Kg
|
|
|
|
|
TString4 _umgr; // Unit<69> di misura dei gr
|
|
|
|
|
|
2011-02-23 11:28:24 +00:00
|
|
|
|
public:
|
|
|
|
|
void aggiungi_riga(const TString& codart);
|
|
|
|
|
TInvia_articoli_skema();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TInvia_articoli_skema::aggiungi_riga(const TString& codart)
|
|
|
|
|
{
|
|
|
|
|
//preparo la cache su anamag
|
2011-11-22 16:17:42 +00:00
|
|
|
|
TArticolo & anamag = cached_article(codart);
|
2011-02-23 11:28:24 +00:00
|
|
|
|
|
|
|
|
|
const TString80 desart = anamag.get(ANAMAG_DESCR);
|
2011-11-22 16:17:42 +00:00
|
|
|
|
const TString80 tpart = anamag.get(ANAMAG_CODARTALT);
|
|
|
|
|
TString8 codlav;
|
|
|
|
|
codlav.format("%05d", anamag.get_int(ANAMAG_CODLAV1));
|
|
|
|
|
real peso = anamag.get_real(ANAMAG_PESO);
|
|
|
|
|
const TString4 ump = anamag.get(ANAMAG_UMP);
|
2011-04-06 08:37:58 +00:00
|
|
|
|
const real lunghezza = anamag.get_real(ANAMAG_USER9);
|
|
|
|
|
const real larghezza = anamag.get_real(ANAMAG_USER10);
|
2011-11-22 16:17:42 +00:00
|
|
|
|
|
|
|
|
|
if (ump.full())
|
|
|
|
|
{
|
|
|
|
|
if (ump != _umkg)
|
|
|
|
|
{
|
|
|
|
|
peso = anamag.convert_to_um(peso, _umkg, ump, false); // Converto in Kg
|
|
|
|
|
peso.round(3); // Arrotondo al grammo
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
peso = ZERO;
|
|
|
|
|
|
2011-02-23 11:28:24 +00:00
|
|
|
|
new_rec("");
|
2011-04-06 08:37:58 +00:00
|
|
|
|
set("CODART", codart);
|
|
|
|
|
set("DESART", desart);
|
|
|
|
|
set("CODLAV", codlav);
|
|
|
|
|
set("TPART", tpart);
|
2011-11-22 16:17:42 +00:00
|
|
|
|
set("PESO", peso.stringa(10, 3, '0'));
|
|
|
|
|
set("LUNGHEZZA", lunghezza.string(4, 0));
|
|
|
|
|
set("LARGHEZZA", larghezza.string(4, 0));
|
2011-02-23 11:28:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TInvia_articoli_skema::TInvia_articoli_skema()
|
2011-11-22 16:17:42 +00:00
|
|
|
|
: TAS400_recordset("AS400(115)")
|
2011-02-23 11:28:24 +00:00
|
|
|
|
{
|
2011-11-22 16:17:42 +00:00
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
FILE ARTICOLI.TXT
|
|
|
|
|
|
|
|
|
|
Campo Tipo Posizione
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
Codice Articolo Alfanumerico 1-20
|
|
|
|
|
Descrizione Articolo Alfanumerico 21-70
|
|
|
|
|
Codice Lavaggio Numerico intero
|
|
|
|
|
Allineato a destra. 71-75
|
|
|
|
|
Tipo Articolo Alfanumerico 76-95
|
|
|
|
|
Peso (Kg) Numerico
|
|
|
|
|
con 3 decimali
|
|
|
|
|
Allineato a destra
|
|
|
|
|
(formato 999999,999) 96-105
|
|
|
|
|
Lunghezza Numerico
|
|
|
|
|
Allineato a destra
|
|
|
|
|
(formato 99999) 106-109
|
|
|
|
|
Larghezza Numerico
|
|
|
|
|
Allineato a destra
|
|
|
|
|
(formato 99999) 110-113
|
|
|
|
|
*/
|
|
|
|
|
|
2011-04-06 08:37:58 +00:00
|
|
|
|
create_field("CODART", -1, 20, _alfafld, true); //codice articolo
|
|
|
|
|
create_field("DESART", -1, 50, _alfafld, true); //descrizione
|
2011-11-22 16:17:42 +00:00
|
|
|
|
create_field("CODLAV", -1, 5, _alfafld, true); //codice lavaggio
|
2011-04-06 08:37:58 +00:00
|
|
|
|
create_field("TPART", -1, 20, _alfafld, true); //tipo articolo
|
2011-11-22 16:17:42 +00:00
|
|
|
|
create_field("PESO", -1, 10, _alfafld, true); //peso
|
|
|
|
|
create_field("LUNGHEZZA", -1, 4, _alfafld, true); //lunghezza
|
|
|
|
|
create_field("LARGHEZZA", -1, 4, _alfafld, true); //larghezza
|
2011-09-12 13:02:42 +00:00
|
|
|
|
create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo
|
2011-11-22 16:17:42 +00:00
|
|
|
|
|
|
|
|
|
_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" : "";
|
2011-02-23 11:28:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
|
//// TINVIA_DOTAZIONI_SKEMA ////
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//Classe TInvia_dotazioni_skema
|
|
|
|
|
class TInvia_dotazioni_skema: public TAS400_recordset
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
void aggiungi_riga(const long codcf, const long codcont);
|
|
|
|
|
TInvia_dotazioni_skema();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TInvia_dotazioni_skema::aggiungi_riga(const long codcf, const long codcont)
|
|
|
|
|
{
|
|
|
|
|
//preparo il recodset delle righe contratto
|
|
|
|
|
TString query;
|
|
|
|
|
query << "USE LVRCONDV\n"
|
|
|
|
|
<< "FROM CODCF=" << codcf << " CODCONT=" << codcont << "\n"
|
|
|
|
|
<< "TO CODCF=" << codcf << " CODCONT=" << codcont;
|
|
|
|
|
|
|
|
|
|
TISAM_recordset rcont(query);
|
|
|
|
|
|
|
|
|
|
for(bool ok = rcont.move_first(); ok; ok = rcont.move_next())
|
|
|
|
|
{
|
|
|
|
|
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
|
|
|
|
|
|
|
|
|
|
new_rec("");
|
2011-11-22 16:17:42 +00:00
|
|
|
|
TString16 cod;
|
|
|
|
|
|
|
|
|
|
cod.format("%06d", codcf);
|
|
|
|
|
|
|
|
|
|
set("CODCF", cod);
|
2011-02-23 11:28:24 +00:00
|
|
|
|
set("CODART", codart);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TInvia_dotazioni_skema::TInvia_dotazioni_skema()
|
2011-09-12 13:02:42 +00:00
|
|
|
|
: TAS400_recordset("AS400(42)")
|
2011-02-23 11:28:24 +00:00
|
|
|
|
{
|
2011-11-22 16:17:42 +00:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
FILE DOTAZIONE.TXT
|
|
|
|
|
|
|
|
|
|
Campo Tipo Posizione
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
Codice Cliente Alfanumerico 1-20
|
|
|
|
|
Codice Articolo Alfanumerico 21-40
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
2011-09-12 13:02:42 +00:00
|
|
|
|
create_field("CODCF", -1, 20, _alfafld, true); //codice cliente
|
|
|
|
|
create_field("CODART", -1, 20, _alfafld, true); //codice cliente
|
2011-07-22 15:01:05 +00:00
|
|
|
|
create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo
|
2011-02-23 11:28:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////
|
|
|
|
|
//// TInvcon_skema_msk ////
|
|
|
|
|
///////////////////////////
|
|
|
|
|
|
|
|
|
|
//classe TInvcon_skema_msk
|
|
|
|
|
class TInvcon_skema_msk: public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void esporta() const;
|
|
|
|
|
TInvcon_skema_msk();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//ESPORTA: metodo che crea il file di output nel percorso desiderato
|
|
|
|
|
void TInvcon_skema_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);
|
|
|
|
|
TFilename file_cli = path; file_cli.add("clienti.txt");
|
|
|
|
|
TFilename file_art = path; file_art.add("articoli.txt");
|
|
|
|
|
TFilename file_dot = path; file_dot.add("dotazione.txt");
|
|
|
|
|
|
|
|
|
|
//preparo il recodset che contiene tutti i contratti validi
|
2011-09-12 13:02:42 +00:00
|
|
|
|
TString query;
|
2011-02-23 11:28:24 +00:00
|
|
|
|
query << "USE LVCONDV\n"
|
2011-06-08 10:17:55 +00:00
|
|
|
|
<< "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))&&(CONTSPOR>0)\n"
|
2011-02-23 11:28:24 +00:00
|
|
|
|
<< "BY CODCF";
|
|
|
|
|
|
2011-06-08 10:17:55 +00:00
|
|
|
|
|
2011-02-23 11:28:24 +00:00
|
|
|
|
TISAM_recordset contratti(query);
|
|
|
|
|
contratti.set_var("#DATA", datasc);
|
|
|
|
|
|
|
|
|
|
if(contratti.items() > 0)
|
|
|
|
|
{
|
|
|
|
|
TInvia_clienti_skema* recset_clienti = new TInvia_clienti_skema();
|
|
|
|
|
TInvia_articoli_skema* recset_articoli = new TInvia_articoli_skema();
|
|
|
|
|
TInvia_dotazioni_skema* recset_dotazioni = new TInvia_dotazioni_skema();
|
|
|
|
|
|
|
|
|
|
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 ok = contratti.move_first(); ok; ok = 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
recset_clienti->aggiungi_riga(codcf);
|
|
|
|
|
recset_dotazioni->aggiungi_riga(codcf, codcon);
|
|
|
|
|
}
|
|
|
|
|
recset_clienti->save_as(file_cli);
|
2011-06-08 10:17:55 +00:00
|
|
|
|
recset_dotazioni->save_as(file_dot);
|
2011-02-23 11:28:24 +00:00
|
|
|
|
|
|
|
|
|
TISAM_recordset anamag(TR("USE ANAMAG"));
|
|
|
|
|
|
|
|
|
|
for(bool ok1 = anamag.move_first(); ok1; ok1 = anamag.move_next())
|
|
|
|
|
{
|
|
|
|
|
const TString80 codart = anamag.get(ANAMAG_CODART).as_string();
|
|
|
|
|
recset_articoli->aggiungi_riga(codart);
|
|
|
|
|
}
|
2011-06-08 10:17:55 +00:00
|
|
|
|
recset_articoli->save_as(file_art);
|
2011-02-23 11:28:24 +00:00
|
|
|
|
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_skema_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_skema_msk::TInvcon_skema_msk() : TAutomask("lv3800a") {}
|
|
|
|
|
|
|
|
|
|
///////////////////////////
|
|
|
|
|
//// TInvcon_skema_app ////
|
|
|
|
|
///////////////////////////
|
|
|
|
|
|
|
|
|
|
//classe TInvcon_skema_app
|
|
|
|
|
class TInvcon_skema_app : public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void main_loop();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TInvcon_skema_app::main_loop()
|
|
|
|
|
{
|
|
|
|
|
TInvcon_skema_msk msk;
|
|
|
|
|
while (msk.run() != K_QUIT)
|
|
|
|
|
msk.esporta();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int lv3800(int argc, char *argv[])
|
|
|
|
|
{
|
|
|
|
|
TInvcon_skema_app a;
|
|
|
|
|
a.run (argc, argv, TR("Invio a contapezzi"));
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|