campo-sirio/lv/lv3600.cpp
luca83 a0b34fe955 Patch level : 10.0 patch 667
Files correlati     : lv3
Ricompilazione Demo : [ ]
Commento            :
Scambiati 2 coppie di campi mentre venivano caricate


git-svn-id: svn://10.65.10.50/trunk@20211 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-03-09 08:55:25 +00:00

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))&&((DATASC>=#DATA)||(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;
}