Patch level : 10.0 patch ???
Files correlati : lv3 lv3600a.msk Ricompilazione Demo : [ ] Commento : Nuovo programma di esportazione per contapezzi Montanari (Diana2000) git-svn-id: svn://10.65.10.50/trunk@20192 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ad50d76597
commit
9b65b910f2
307
lv/lv3600.cpp
Executable file
307
lv/lv3600.cpp
Executable file
@ -0,0 +1,307 @@
|
||||
#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;
|
||||
private:
|
||||
const real convert_to_kg(const TString& codart, const TString& umkg);
|
||||
public:
|
||||
void aggiungi_riga(const long codcf, const TString& codart);
|
||||
TInvcon_rec();
|
||||
};
|
||||
|
||||
//CONVERT_TO_KG: metodo che converte il peso di un articolo
|
||||
const real TInvcon_rec::convert_to_kg(const TString& codart, const TString& umkg)
|
||||
{
|
||||
TArticolo& art = cached_article(codart);
|
||||
|
||||
const TString4 ump = art.get(ANAMAG_UMP);
|
||||
const real peso = art.get_real(ANAMAG_PESO);
|
||||
|
||||
real qtaconv = ZERO;
|
||||
|
||||
if (ump.full() && peso != ZERO)
|
||||
{
|
||||
//preparo una cache sulla tabella delle unità di misura
|
||||
const TRectype& unita = cache().get("%UMS", ump);
|
||||
//leggo e controllo se esiste l'unità di misura di riferimento
|
||||
const TString4 umrif = unita.get("S7");
|
||||
real fatconv = UNO;
|
||||
|
||||
if (umrif == umkg)
|
||||
{
|
||||
//leggo e controllo il fattore di conversione
|
||||
fatconv = unita.get_real("R10");
|
||||
}
|
||||
|
||||
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
|
||||
if(fatconv != ZERO)
|
||||
qtaconv = fatconv * peso;
|
||||
}
|
||||
return qtaconv;
|
||||
}
|
||||
|
||||
//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 TRectype& anamag = cache().get(LF_ANAMAG, codart);
|
||||
|
||||
//recupero i dati di interesse da anamag
|
||||
TString80 desart = anamag.get(ANAMAG_DESCR);
|
||||
real peso = convert_to_kg(codart, _umkg);
|
||||
long lavco1 = atoi(anamag.get(ANAMAG_ARTLAVCONT).left(2));
|
||||
long lavco2 = 0; //non serve
|
||||
long linde1 = anamag.get_int(ANAMAG_LINDEST1);
|
||||
long linde2 = anamag.get_int(ANAMAG_LINDEST2);
|
||||
long lavatr = anamag.get_int(ANAMAG_LAVATRICE);
|
||||
long codla1 = anamag.get_int(ANAMAG_CODLAV1);
|
||||
long codla2 = anamag.get_int(ANAMAG_CODLAV2);
|
||||
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", peso);
|
||||
set("LAVCON1", (TVariant)lavco1);
|
||||
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(179)")
|
||||
{
|
||||
create_field("FILLER1", -1, 1, _alfafld, false); //riempimento
|
||||
create_field("CODCF", -1, 6, _longfld, true); //codice cliente
|
||||
create_field("RAGSOC1", -1, 30, _alfafld, true); //ragione sociale 1
|
||||
create_field("RAGSOC2", -1, 23, _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", -1, 6, _realfld, true); //peso
|
||||
create_field("LAVCON1", -1, 2, _intfld, true); //lavacontinua 1
|
||||
create_field("LAVCON2", -1, 2, _intfld, false); //lavacontinua 2
|
||||
create_field("LINDES1", -1, 2, _intfld, true); //linea di destinazione 1
|
||||
create_field("LINDES2", -1, 2, _intfld, true); //linea di destinazione 2
|
||||
create_field("LAVATR", -1, 2, _intfld, true); //lavatrice
|
||||
create_field("CODARTLAV", -1, 3, _intfld, true); //codice lavaggio 1
|
||||
create_field("CODCLILAV", -1, 3, _intfld, true); //codice lavaggio 2
|
||||
create_field("MANGANO", -1, 3, _intfld, true); //mangano
|
||||
create_field("CONF", -1, 3, _intfld, 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");
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////
|
||||
//// TINVCON_MSK ////
|
||||
///////////////////////////
|
||||
|
||||
//classe TInvcon_msk
|
||||
class TInvcon_msk: public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
void esporta() const;
|
||||
|
||||
public:
|
||||
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)
|
||||
{
|
||||
switch (f.dlg())
|
||||
{
|
||||
case DLG_ELABORA:
|
||||
//alla pressione del bottone elabora eseguo il metodo elabora
|
||||
if(e == fe_button)
|
||||
esporta();
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
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
|
||||
{
|
||||
TInvcon_msk* _msk;
|
||||
protected:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
|
||||
public:
|
||||
bool transfer();
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
//CREATE: metodo costruttore
|
||||
bool TInvcon_app::create()
|
||||
{
|
||||
_msk = new TInvcon_msk;
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
//DESTROY: metodo distruttore
|
||||
bool TInvcon_app::destroy()
|
||||
{
|
||||
delete _msk;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
//TRANSFER: metodo principale dell'elaborazione, che non deve fare niente
|
||||
//perchè viene tutto gestito nella maschera
|
||||
bool TInvcon_app::transfer()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void TInvcon_app::main_loop()
|
||||
{
|
||||
while (_msk->run() == K_ENTER)
|
||||
transfer();
|
||||
}
|
||||
|
||||
int lv3600(int argc, char *argv[])
|
||||
{
|
||||
TInvcon_app a;
|
||||
a.run (argc, argv, "Invio a contapezzi");
|
||||
return TRUE;
|
||||
}
|
5
lv/lv3600a.h
Executable file
5
lv/lv3600a.h
Executable file
@ -0,0 +1,5 @@
|
||||
//Inivio a contapezzi
|
||||
//Campi Maschera lv3600a
|
||||
#define F_PATH 201
|
||||
#define F_FILE 202
|
||||
#define F_SCAD 203
|
48
lv/lv3600a.uml
Executable file
48
lv/lv3600a.uml
Executable file
@ -0,0 +1,48 @@
|
||||
#include "lv3600a.h"
|
||||
|
||||
TOOLBAR "" 0 0 0 2
|
||||
|
||||
BUTTON DLG_ELABORA 2 2
|
||||
BEGIN
|
||||
PROMPT 3 1 "Esporta"
|
||||
PICTURE TOOL_ELABORA
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Esportazione a contapezzi" 0 0 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bParametri file di output"
|
||||
END
|
||||
|
||||
STRING F_PATH 256 50
|
||||
BEGIN
|
||||
PROMPT 2 2 "Cartella "
|
||||
DSELECT
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_FILE 255 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Nome file "
|
||||
FSELECT "*.dat"
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 5 "@bFiltri"
|
||||
END
|
||||
|
||||
DATE F_SCAD
|
||||
BEGIN
|
||||
PROMPT 2 6 "Considera i contratti validi fino al "
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user